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

日间/夜间模式切换问题:切换后刷新或跳转页面恢复为日间模式

解决夜间模式刷新/跳转后恢复日间模式的问题

当前代码仅在页面运行时临时切换主题状态,没有将用户的主题偏好持久化存储。页面刷新或跳转后,浏览器会重新加载初始状态,导致主题重置为默认的日间模式。我们可以通过浏览器的 localStorage 来保存用户的主题选择,实现状态持久化。

修改后的 JavaScript 代码

const themeToggler = document.querySelector(".theme-toggler");
const body = document.body;
const sunIcon = themeToggler.querySelector("span:nth-child(1)");
const moonIcon = themeToggler.querySelector("span:nth-child(2)");

// 页面加载时恢复保存的主题
function loadSavedTheme() {
  const savedTheme = localStorage.getItem("theme");
  if (savedTheme === "dark") {
    body.classList.add("dark-theme-variables");
    sunIcon.classList.remove("active");
    moonIcon.classList.add("active");
  } else {
    body.classList.remove("dark-theme-variables");
    sunIcon.classList.add("active");
    moonIcon.classList.remove("active");
  }
}

// 切换主题并保存到 localStorage
themeToggler.addEventListener("click", () => {
  const isDark = body.classList.toggle("dark-theme-variables");
  sunIcon.classList.toggle("active");
  moonIcon.classList.toggle("active");
  
  // 根据当前主题状态保存到本地存储
  localStorage.setItem("theme", isDark ? "dark" : "light");
});

// 页面加载完成后自动恢复主题
document.addEventListener("DOMContentLoaded", loadSavedTheme);

关键改动说明

  • 持久化存储:使用 localStorage.setItem() 将用户选择的主题("light" 或 "dark")保存到浏览器本地,即使关闭浏览器也不会丢失。
  • 页面加载恢复:通过 DOMContentLoaded 事件触发主题恢复逻辑,读取本地存储的主题设置,自动应用对应的主题类和图标状态。
  • 状态同步:每次切换主题时同步更新本地存储的值,确保操作后最新的偏好被保存。

修改完成后,用户切换到夜间模式后,刷新页面或跳转站内其他页面时,主题会保持为夜间模式,直到用户主动切换回日间模式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 18:16:05