javascript - 跨多个 html 页面设置 darkMode
问题描述
我有两个 html 页面(index.htm 和 details.htm)。每当我在 details.html 中启用暗模式时,它都会保留在 index.html 中而没有任何问题,但是当我从 index.html 页面转到详细信息页面时,暗模式会被禁用。
我正在使用本地存储来启用和禁用暗模式。
我的 JavaScript 代码:
let darkMode = localStorage.getItem("darkMode");
const toggleBtn = document.querySelectorAll("#mode");
document.body.classList.add('lightMode');
function enableDarkMode() {
localStorage.setItem('darkMode', 'enabled');
document.body.classList.add('darkMode');
document.body.classList.remove('lightMode');
}
function disableDarkMode() {
localStorage.setItem('darkMode', null)
document.body.classList.remove('darkMode');
document.body.classList.add('lightMode');
}
toggleBtn.forEach(btn => {
if(darkMode === 'enabled') {
enableDarkMode();
}
btn.addEventListener("click", () => {
darkMode = localStorage.getItem('darkMode')
if (darkMode !== 'enabled') {
enableDarkMode()
} else {
disableDarkMode();
}
});
})
CSS代码:
.lightMode {
--background-color: white;
--textColor: black;
--borderColor: black;
--shadowColor: grey;
--card: white;
--span: rgba(0, 0, 0, 0.459);
--footer: rgb(231, 231, 231);
--element: rgba(0, 0, 0, 0.03);
--tagColor: rgb(66, 66, 66);
}
.darkMode {
--background-color: rgb(25, 25, 25);
--textColor: rgba(255, 255, 255, 0.76);
--borderColor: white;
--shadowColor: black;
--card: rgb(39, 39, 39);
--span: rgba(255, 255, 255, 0.459);
--footer: rgb(56, 56, 56);
--element: rgba(49, 49, 49, 0.493);
--tagColor: rgb(255, 255, 255);
}
我的 css 仅包含两个主题具有相同名称的几个自定义变量。
A 对于我的 html,body 没有任何类。body 标签的类是通过 javascript 添加的
有没有办法将darkMode设置为对所有页面启用,除非用户每次访问页面时都自己更改它?
解决方案
我认为您的 JS 没有问题,您可能没有将类名“darkMode”放在 html 的正文标记中。有一件事可以肯定的是,问题不在于脚本,而在于 css 或 html。再次查看这两个的代码。
推荐阅读
- audio - 通过 websocket 从麦克风流式传输音频。我可以看到正在发送的数据,但在接收客户端听不到它
- javascript - 从子组件传递数据时,父状态不更新
- linux - 命令行在哪里搜索可执行程序
- javascript - 在全局上下文中使用类方法具有未定义的“this”
- json - 使用 Spark 访问嵌套在结构中的 json 数组
- filter - 是否可以仅保留对公共 Google 表格客户端的更改?
- css - 当左侧有很多内容时,防止 CSS 将节点包裹在其最大宽度以下的树中,例如思维导图
- unity3d - 如何使对象的参考框架位于其尖端而不是其中心(Unity3d)?
- postman - 在邮递员收集运行中禁用请求
- batch-file - 批处理文件可以做到这一点吗?