javascript - 如何在所有页面上设置暗模式
问题描述
我怎样才能正确?
每次我切换到不同的页面或刷新它时,它都会切换回我网站中的浅色主题:
https://github.com/elasticalva/elasticalva.github.io
这是我的按钮(root/_includes/navigation.html):
<li><div id="btn-light-dark"></div></li>
这是我的 CSS (root/_sass/_layout.scss):
body {
background-color: #edf2f7;
color: #333333;
}
.oscuro {
background-color: #333333;
color: #edf2f7;
}
#btn-light-dark::after {
content: '';
}
body.oscuro #btn-light-dark::after {
content: '';
}
@media (prefers-color-scheme: dark) {
body {
color:#333333;
background:#edf2f7
}}
这是我的 JS (root/assets/dark.js):
const btnDarkLight = (btn) => {
const btnElem = document.querySelector(btn);
const setText = () => {
const text = document.body.classList.contains('oscuro') ? '' : '☀️';
btnElem.textContent = text;
}
document.addEventListener("click", (e) => {
if (e.target.matches(btn)) {
document.body.classList.toggle('oscuro');
setText();
}
});
setText();
}
btnDarkLight("#btn-light-dark");
它给了我很多错误:
未捕获的类型错误:无法读取 null 的属性“classList”
- 在 setText (dark.js:5)
- 在 btnDarkLight (dark.js:16)
- 在dark.js:20
它应该很简单,但我不明白。提前致谢!
解决方案
您可以使用 JS 将当前主题模式放在跨页面和会话保存的“本地存储”中,像这样使用它:
// set dark mode
localStorage.setItem('theme', 'dark');
// set light mode
localStorage.setItem('theme', 'light');
// check if darkmode:
if (localStorage.getItem('theme') == 'dark') {
}
然后您可以在每次加载页面时检查当前主题
推荐阅读
- c - 如何在函数调用期间使用中断来重置程序或返回主程序
- c# - C# 使用单元格形成表格布局面板
- php - 为什么我在 PHP firebase rest api 中收到 Invalid Key type 错误?
- python - 如何为 django 中的每个用户使用临时数据库
- android-layout - Android - 为带有导航抽屉和应用栏的应用完全隐藏状态和导航栏
- c++ - std::move on boost::asio::ip::tcp::socket
- python - 对于使用的每个 Scipy 函数,Spyder 都会引发 DeprecationWarning
- laravel - [Route: berita.update] 缺少必需的参数
- javascript - 正则表达式(太多?)很多情况
- powershell - 通过切片现有的arraylist创建Arraylist的Arraylist