You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:网页暗黑模式刷新后无法保留,如何用localStorage实现?

解决主题切换刷新后重置的问题

要实现主题状态的本地记忆,需在切换主题时存储状态,同时在页面加载时读取并恢复状态,具体修改如下:

1. 改造主题切换函数,添加localStorage存储

修改toggleTheme函数,每次切换后将当前主题标识存入localStorage,确保刷新页面能读取到之前的选择:

function toggleTheme() {
    var theme = document.getElementsByTagName('link')[0];
    let currentTheme;
    if (theme.getAttribute('href') == 'stylesheet.css') {
        theme.setAttribute('href', 'testingstylesheet.css');
        currentTheme = 'dark';
    } else {
        theme.setAttribute('href', 'stylesheet.css');
        currentTheme = 'light';
    }
    // 将当前主题存入本地存储
    localStorage.setItem('selectedTheme', currentTheme);
}

2. 添加页面初始化逻辑,恢复主题和按钮状态

在页面加载完成后,读取localStorage中的主题设置,自动应用对应样式,并同步切换按钮的图标状态:

// 页面加载时执行初始化
window.addEventListener('DOMContentLoaded', function() {
    var themeLink = document.getElementsByTagName('link')[0];
    var toggleBtn = document.querySelector('.fa-toggle-off');
    // 获取本地存储的主题,默认使用亮色
    var savedTheme = localStorage.getItem('selectedTheme') || 'light';
    
    if (savedTheme === 'dark') {
        themeLink.setAttribute('href', 'testingstylesheet.css');
        // 切换按钮图标为开启状态
        toggleBtn.classList.add('fa-toggle-on');
    } else {
        themeLink.setAttribute('href', 'stylesheet.css');
        toggleBtn.classList.remove('fa-toggle-on');
    }
});

3. 修正按钮的class属性(原代码小问题)

原按钮class里多了个多余的分号,需要去掉:

<i style="margin: 5px;position:fixed" onclick="myFunction(this);toggleTheme();toggleImage();" class="fa-solid fa-toggle-off fa-3x"></i>

完整修改后的代码

<head>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<script>
      function toggleTheme() {
          var theme = document.getElementsByTagName('link')[0];
          let currentTheme;
          if (theme.getAttribute('href') == 'stylesheet.css') {
              theme.setAttribute('href', 'testingstylesheet.css');
              currentTheme = 'dark';
          } else {
              theme.setAttribute('href', 'stylesheet.css');
              currentTheme = 'light';
          }
          localStorage.setItem('selectedTheme', currentTheme);
      }

      // 页面初始化恢复主题
      window.addEventListener('DOMContentLoaded', function() {
          var themeLink = document.getElementsByTagName('link')[0];
          var toggleBtn = document.querySelector('.fa-toggle-off');
          var savedTheme = localStorage.getItem('selectedTheme') || 'light';
          
          if (savedTheme === 'dark') {
              themeLink.setAttribute('href', 'testingstylesheet.css');
              toggleBtn.classList.add('fa-toggle-on');
          } else {
              themeLink.setAttribute('href', 'stylesheet.css');
              toggleBtn.classList.remove('fa-toggle-on');
          }
      });
</script>
</head>
<body>
<font size=6.5><i style="margin: 5px;position:fixed" onclick="myFunction(this);toggleTheme();toggleImage();" class="fa-solid fa-toggle-off fa-3x"></i></font>
<script>
      function myFunction(x) {
        x.classList.toggle("fa-toggle-on");
      }
   </script>
</body>

关键说明

  • localStorage.getItem('selectedTheme'):读取本地存储的主题选择,若没有存储记录则默认使用亮色主题
  • window.addEventListener('DOMContentLoaded'):确保DOM完全加载后再执行初始化逻辑,避免出现找不到元素的错误
  • 同步按钮状态:初始化时根据存储的主题修改按钮的class,保证图标显示和当前主题一致

内容的提问来源于stack exchange,提问作者rabbit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 14:37:14