【问题标题】:Set darkMode across multiple html pages跨多个 html 页面设置暗模式
【发布时间】: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


【解决方案1】:

我认为你的 JS 没有问题,你可能没有将类名“darkMode”放在 html 的 body 标记中。有一件事可以肯定的是,问题不在于脚本,而在于 css 或 html。再次查看这两个的代码。

【讨论】:

  • 顺便说一下,您的站点/元素周期表对我来说运行良好,我没有看到暗模式的问题。只是我必须一次又一次地在所有页面启用它
  • 是的,这就是问题所在。用户必须一次又一次地点击才能启用它。
  • 回答我一件事 - 你是否创建了两个不同的 html 页面?如果您将两个页面都放在一个 html 正文中,那么这个问题可能会得到解决。就像一个<section></section/> for 元素周期表和另一个<section></section/> 用于你所说的动画或详细信息页面。
  • 是的,有两个单独的 html 文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-17
  • 1970-01-01
  • 1970-01-01
  • 2014-07-27
  • 2014-06-22
  • 1970-01-01
  • 2022-06-17
相关资源
最近更新 更多