【问题标题】:Issue with Saving Dark Mode Preference (localStorage)保存暗模式首选项(localStorage)的问题
【发布时间】:2019-02-26 02:42:13
【问题描述】:

我正在尝试使用 localStorage 在我的网站上保存暗模式首选项。我遇到的问题是当您切换到暗模式并点击刷新时,它会保持在暗模式。但是,如果您切换到深色模式,然后再切换回浅色模式,然后点击刷新,它会加载深色模式。

到目前为止,我还没有找到任何有用的资源。

这是我的小提琴以及下面的 js 脚本。

Fiddle

Javascript

$(document).ready(function(){
    $('ul').click(function(){
        $('ul').toggleClass('active')

        let darkThemeEnabled = $('section').toggleClass('dark');

        localStorage.setItem('dark-theme-enabled', darkThemeEnabled);
    })
})

if (localStorage.getItem('dark-theme-enabled')) {
    $('section').toggleClass('dark');

    $('ul').toggleClass('active');  
}

【问题讨论】:

    标签: javascript jquery html css webpage


    【解决方案1】:

    这对我有用(我把黑暗模式放在身上):

    const body = document.querySelector('body');
    const checkBox = document.getElementById('checkbox');
    
    window.addEventListener('load', () => {        
    
        if (!localStorage.dark_mode)
            localStorage.dark_mode = false;
    
        else if (JSON.parse(localStorage.dark_mode) === true) {
                body.classList.add('dark-mode');
                checkbox.checked = true;
                }
    });
    
    checkBox.addEventListener('click', (e) => {
        body.classList.toggle('dark-mode');
    
        if (body.classList.contains('dark-mode')) {
            checkbox.checked = true;
            localStorage.dark_mode = true;
        }
        else {
            checkbox.checked = false;
            localStorage.dark_mode = false;
        }
    });
    

    【讨论】:

      【解决方案2】:

      您需要将布尔值设置为localStorage

      $("section").toggleClass("dark");
      let darkThemeEnabled = $("section").hasClass("dark");
      localStorage.setItem("dark-theme-enabled", darkThemeEnabled);
      

      编辑

      同时改变你的获取方式:

      if (localStorage.getItem('dark-theme-enabled')) {
          $('section').addClass('dark');
          $('ul').addClass('active');  
      }
      

      【讨论】:

      • 我刚刚尝试添加它,并且在它记住暗模式的情况下得到了相同的结果,但是当切换到亮和刷新浏览器时,它会加载暗模式。
      • 抱歉,刚刚发现你的问题@trevorc,我会更新我的答案。
      • 嘿@jack,我仍然遇到与该获取方法相同的问题。我做了更多研究并像这样添加 JSON.parse -> 'if (JSON.parse(localStorage.getItem('dark-theme-enabled')))' 似乎对其他人有用,但是当我这样做时,我得到了 Uncaught语法错误:意外的标记 o - 仍然给我同样的问题,只返回暗模式。
      • @JackBashford 我没怎么用过localStorage,不过好像booleans are stored as strings
      • 是的@ChrisHappy - 但他们仍然是真实的,这就是我使用的if 声明的工作原理。
      猜你喜欢
      • 2021-07-24
      • 1970-01-01
      • 2023-01-18
      • 2022-01-10
      • 1970-01-01
      • 2014-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多