前些天晚上看博客比较频繁,白色的背景看起来非常刺眼,所以就想着给博客做一个黑暗模式的功能,主要思路为当我们点击切换按钮后使用jquery将对应样式替换掉。
body {
background-color: white
}
.content p{
color: black
}
body {
background-color: #282923
}
.content p{
color: grey
}
我们先引入 light.css
样式,这是日间模式
DOCTYPE html>
<html>
<head>
<title>黑暗模式title>
<link rel="stylesheet" href="./light.css" id="theme-style">
head>
<body>
<div class="content">
<p>我是p标签p>
<button onclick="switchTheme()">切换主题button>
div>
body>
html>
点击按钮后,使用jQuery获取当前的 href 值,然后重新赋值即可,如果当前是日间模式那么我们就将 href 设置为 dark.css。
<!-- 引入jQuery -->
<script src="https://www.blogry.cn/js/jq.js"></script>
<!-- 切换主题 -->
<script type="text/javascript">
function switchTheme() {
var href = $("#theme-style").attr("href");
if (href == "./dark.css") {
$("#theme-style").attr("href","./light.css")
} else {
$("#theme-style").attr("href","./dark.css")
}
}
</script>
这样功能虽然实现了,我们每次进入都需要重新切换,有没有办法可以让他记住我们的操作呢?当然是有的,接下来我们就需要用到 localStorage
啦!
localstorage是web上的一种本地存储技术。
localstorage是永远存在的本地存储,除非用户自行去删除相关的数据,否则会永远存在。
当我们每次切换主题后,可以通过 localStorage.setItem("theme","light")
存储一个标识,在重新打开页面时通过localStorage.getItem("theme")
判断是 dark 还是 light,然后将 href 添加对应的样式即可。
<!-- 切换主题 -->
<script type="text/javascript">
//保存状态
if (localStorage.getItem("theme") == "dark") {
$("#theme-style").attr("href","./dark.css")
}
function switchTheme() {
var href = $("#theme-style").attr("href");
if (href == "./dark.css") {
$("#theme-style").attr("href","./light.css")
localStorage.setItem("theme","dark");
} else {
$("#theme-style").attr("href","./dark.css")
localStorage.setItem("theme","light");
}
}
</script>
大体功能就已经实现啦。但是在我们切换模式的时候没有任何过渡效果,显得非常生硬,我们可以适当添加一些过渡动画。
/* dark */
body {
background-color: #282923;
transition: 0.5s;
}
/* light */
body {
background-color: white;
transition: 0.5s;
}