
通过 localstorage 在页面加载时读取并应用用户上次选择的主题,配合 css 类切换实现深色/浅色模式的持久化保存,避免刷新后重置为默认样式。
在构建支持主题切换(如深色/浅色模式)的网站时,一个常见痛点是:用户手动切换主题后,一旦刷新页面,设置即丢失,页面恢复为初始状态。根本原因在于浏览器内存中的 DOM 状态(如 classList)不会自动跨刷新保留。解决该问题的核心思路是——将用户偏好“落地”到持久化存储中,并在每次页面加载时主动还原。
推荐使用 localStorage,它具备以下优势:
✅ 浏览器原生支持,无需额外依赖;
✅ 同源下数据长期有效(除非手动清除或代码删除);
✅ 仅存储字符串,轻量且足够表达主题状态(如 "light" 或 "dark")。
以下是完整可运行的实现方案:
HTML 结构(含触发按钮):
JavaScript 逻辑(含初始化与交互):
启明星企业抽奖程序 系统采用ASP.NET4.0 无需数据库。在企业抽奖时,请勿关闭或者刷新页面。因为系统目前没有提供保存数据功能。例如在抽二等奖和一等奖之间,可能有时间间隔。那么,此时,你可以按F11取消全屏,然后最小化页面,再单击右下角喇叭,设置无声。1.启明星抽奖程序配置说明使用说明:在lottery/lottery文件夹下,有3个文本文件。company.txt存放公司名称,award.t
const themeToggle = document.getElementById('theme-toggle');
const body = document.body;
// 页面加载时:从 localStorage 恢复主题
const savedTheme = localStorage.getItem('theme');
if (savedTheme === 'dark') {
body.classList.add('dark');
} else {
body.classList.remove('dark'); // 确保 light 模式干净移除 dark 类
}
// 点击切换时:更新界面 + 持久化保存
themeToggle.addEventListener('click', () => {
body.classList.toggle('dark');
const currentTheme = body.classList.contains('dark') ? 'dark' : 'light';
localStorage.setItem('theme', currentTheme);
});CSS 主题样式(建议使用 class 控制,避免内联样式):
/* 默认为浅色主题(无需额外 class) */
body {
background-color: #ffffff;
color: #000000;
transition: background-color 0.3s, color 0.3s;
}
/* 深色主题覆盖 */
body.dark {
background-color: #222222;
color: #ffffff;
}? 关键注意事项:
- 初始化逻辑(读取 localStorage 并设置 class)必须放在事件监听器注册之前,否则首次加载无法生效;
- 使用 body.classList.add/remove 而非 setAttribute,确保类操作原子、安全;
- 添加 transition 可使颜色切换更平滑,提升用户体验;
- 若需支持系统级暗色偏好(prefers-color-scheme),可在初始化时作为 fallback:
if (!savedTheme) { const systemPrefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches; localStorage.setItem('theme', systemPrefersDark ? 'dark' : 'light'); }
该方案简洁、可靠、兼容性好(支持所有现代浏览器),是前端实现用户偏好持久化的标准实践。









