【发布时间】:2021-08-02 14:20:56
【问题描述】:
我有两个 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 仅包含几个自定义变量,两个主题的名称相同。
我的 html 正文没有任何类。 body标签的类是通过javascript添加的
有没有办法将darkMode设置为对所有页面启用,除非用户每次访问页面时都自己更改它?
【问题讨论】:
-
您是否检查过 DOM 以查看
darkMode类是否已添加到 body 元素中?这将有助于确定问题出在 CSS 还是 JS 中。 -
@j-petty,当我从详细信息页面进入索引页面时,它工作得非常好,但是当我从索引页面进入详细信息页面时,问题就出现了。这是一个更清楚地查看问题的链接 - rithish288.github.io/Periodic-Table
-
感谢您的链接。该类没有设置在正文上,这意味着问题存在于 JS 中。我想知道这是否是您在正文中包含 JS 文件的顺序。我注意到在主页上您将它们放在
head中,但在详细信息页面中,脚本位于body的末尾。我建议在两个页面上保持一致,看看是否会改变结果。
标签: javascript local-storage toggle darkmode