javascript - 如何使暗模式在网页中持久化?
问题描述
我已经尝试过通过本地存储进行持久化,但是当尝试它时显示出丑陋的用户体验,因为每次加载 JavaScript 文件并且每次执行代码,本地存储的功能很难看,我该如何做一些每次加载页面时,持久性本地存储都不会刷新和更新屏幕。
let dark=document.querySelector('.dark-btn');
let body=document.body
dark.addEventListener('click',function(e){
console.log('rahul')
e.preventDefault()
console.log(e)
body.classList.toggle('dark')
e.target.textContent=="dark"?e.target.textContent="light":e.target.textContent="dark";
if(body.classList.contains('dark')){
localStorage.setItem('darkMode','enabled');
}else{
localStorage.setItem('darkMode','disabled');
}
})
if(localStorage.getItem('darkMode')=='enabled'){
body.classList.toggle('dark')
// e.target.textContent=="dark"?e.target.textContent="light":e.target.textContent="dark";
dark.textContent="light"
}else{
dark.textContent="dark"
}
这是我的暗模式代码,但我讨厌这个。
您可以查看我制作的网站,这具有切换页面时从深色变为白色的效果,反之亦然。 暗模式链接
解决方案
您可以在 CSS 文件之后的开头加载同步脚本。检查本地存储,并设置 CSS 变量。它的工作方式是脚本暂停页面的加载,等待它下载。
然后,您的所有组件都可以使用这些 CSS 变量来确定您的配色方案。
如果你想检查用户本身喜欢的配色方案,你可以使用prefers-color-scheme
CSS 媒体查询来做到这一点。
我知道同步加载不好,但如果是一个小脚本,我认为没问题。
这里的工作链接是:https ://persistentdarkmode.infiniti20.repl.co/index.html
推荐阅读
- python - 作业中的冒号 (:) 是什么意思?
- c++ - GCP VM 上的自定义分辨率(在 Windows Server 2019 上使用 T4 GPU)
- angular - 如何将 Observable 数组的元素转换为元组
- java - JFrame 突然吓坏了
- spring-boot - 使用索引查询时使用 Spring Boot 的 Elasticsearch 返回 nullPointerExciption
- r - 创建一个函数,将变量转换为 R 中的因子
- multithreading - 主线程退出如何与循环子线程一起工作?
- excel - 需要减少运行时间来删除删除线字符
- sql-server - org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback;未分类 SQLException; '@P0DIAGNOSIS_DATA' 附近的语法不正确
- python - 基于列条件python pandas的填充和替换