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

页面刷新后Darkmode切换图标自动还原问题求助

解决暗黑模式图标刷新后不匹配的问题

问题根源是页面刷新时,仅恢复了页面的暗黑模式类,但没有同步更新图标的显示状态。以下是修复方案:

步骤1:调整CSS默认显示状态

默认隐藏太阳图标,确保页面加载初期符合未启用暗黑模式的视觉状态:

/* Darkmode */
.dark-mode-toggle {
  background: transparent;
  border: none;
  cursor: pointer;
}

#moon {
  color: var(--a-clr);
  font-size: 2rem;
  display: block;
}

#sun {
  font-size: 2rem;
  color: var(--a-clr);
  display: none; /* 默认隐藏太阳图标 */
}

步骤2:修改JavaScript逻辑

在启用/禁用暗黑模式的函数中同步更新图标显示,并在页面初始化时根据本地存储状态恢复图标状态:

let darkMode = localStorage.getItem("darkMode");
const sun = document.getElementById("sun");
const moon = document.getElementById("moon");
const darkModeToggle = document.querySelector("#dark-mode-toggle");

const enableDarkMode = () => {
  document.documentElement.classList.add("darkmode");
  localStorage.setItem("darkMode", "enabled");
  // 启用暗黑模式时显示太阳,隐藏月亮
  sun.style.display = "block";
  moon.style.display = "none";
};

const disableDarkMode = () => {
  document.documentElement.classList.remove("darkmode");
  localStorage.setItem("darkMode", null);
  // 禁用暗黑模式时显示月亮,隐藏太阳
  sun.style.display = "none";
  moon.style.display = "block";
};

// 页面加载时,根据本地存储恢复状态
if (darkMode === "enabled") {
  enableDarkMode();
} else {
  disableDarkMode();
}

darkModeToggle.addEventListener("click", () => {
  darkMode = localStorage.getItem("darkMode");

  if (darkMode !== "enabled") {
    enableDarkMode();
  } else {
    disableDarkMode();
  }
});

原理说明

  • 页面初始化时,通过localStorage.getItem("darkMode")读取保存的状态,调用对应函数同时设置页面类和图标显示
  • 每次切换暗黑模式时,函数内同步更新图标状态,确保点击操作和视觉反馈一致
  • CSS默认隐藏太阳图标,避免JS加载前出现图标闪烁问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 09:45:14