【问题标题】:Toggle icon not showing unless I click it除非我单击它,否则不会显示切换图标
【发布时间】:2021-06-14 13:46:44
【问题描述】:

我正在使用暗模式代码。使用此代码,我想使用相应的图标在暗模式和亮模式之间切换。这完美地工作,但唯一的问题是页面加载时默认情况下不显示深色/浅色图标。如果我单击该图标,则只有它显示。如何让它在页面加载时默认显示。

这是我正在使用的代码:

  const switcher = document.querySelector("#switcher");
    switcher.setAttribute('src', '...LIGHT-MODE-1.png');

    const toggleSwitch = document.querySelector('.theme-switch input[type="checkbox"]');
    const currentTheme = localStorage.getItem('theme');
    if (currentTheme) {
        document.documentElement.setAttribute('data-theme', currentTheme);
        if (currentTheme === 'dark') {
            toggleSwitch.checked = true;
        }
    }

    function switchTheme(e) {
        if (e.target.checked) {
            document.documentElement.setAttribute('data-theme', 'dark');
            localStorage.setItem('theme', 'dark');
            switcher.setAttribute('src', '...LIGHT-MODE-1.png');
        } else {
            document.documentElement.setAttribute('data-theme', 'light');
            localStorage.setItem('theme', 'light');
            switcher.setAttribute('src', '...DARK-MODE-1.png');
        }
    }
    toggleSwitch.addEventListener('change', switchTheme, false);
<!--The icon HTML-->


<label class="theme-switch" for="checkbox">
        <span title="Enable/disable Dark Mode"><img id="switcher" src=""></span>
        <input type="checkbox" id="checkbox" /></label>

感谢您的帮助和时间!

【问题讨论】:

    标签: javascript html darkmode


    【解决方案1】:

    您似乎错过了第一次暗模式检查中的 src 更改:

    if (currentTheme === 'dark') {
        toggleSwitch.checked = true;
        switcher.setAttribute('src', '...DARK-MODE-1.png');
    }
    

    更新:我建议不要使用所有重复的代码,而是创建一个设置主题的函数,然后您可以从任何地方调用它。这将允许您在初始加载和点击时使用它:

    const switcher = document.querySelector('#switcher');
    const toggleSwitch = document.querySelector('.theme-switch input[type="checkbox"]');
    
    function setTheme(theme) {
        document.documentElement.setAttribute('data-theme', theme);
        localStorage.setItem('theme', theme);
    
        const src = '/path/to/images/' + (theme === 'light' ? 'LIGHT-MODE-1.png' : 'DARK-MODE-1.png');
        switcher.setAttribute('src', src);
    }
    
    const theme = localStorage.getItem('theme') || 'light';
    setTheme(theme);
    
    toggleSwitch.addEventListener('change', (e) => {
        const theme = e.currentTarget.checked ? 'dark' : 'light';
        setTheme(theme);
    });
    

    小提琴:https://jsfiddle.net/fjzue6wa/1/

    【讨论】:

    • 我在我的网站和实际页面上使用源作为带有我的域名的图标的完整链接。为避免在此处发布链接,我将其删除。问题仍然存在。
    • 我已经重写了提供的代码以显示另一种方法。希望这会有所帮助:)
    • 我按照我之前的评论修复了图标问题。但是代码现在不在明暗模式之间切换。请帮忙。
    • 抱歉,忘记了 e.currentTarget.checked 中的 currentTarget;这现在有效吗?这是一个有效的小提琴:jsfiddle.net/fjzue6wa/1
    • 是的,它现在可以工作了!感谢您的所有帮助,非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多