WordPress添加夜间模式cookie版
这两天突然聊起博客主题带夜间模式,瞬间一只夜猫从脑后飘过,关灯后看文章确实刺眼,当然也可以调节手机亮度,但确实很少人会在关灯后看手机,对眼睛伤害很大。
本来这个功能无需折腾,比如腾讯浏览器手机版就有夜间模式,任何网站都可以瞬间变成夜间模式,效果也很好~ 但是!好吧,我们的个人博客是体贴到极致,不折腾不铁血。
原以为挺简单的,只需要搞两个CSS,互相切换一下就OK,后来发现这还得用到cookie,否则刷新一下就又恢复了,好吧,其他人一定搞过,既然有人做了,就不用再费脑子了。
搜了一下,发现有两种方法,第一种用遮的,懒人法,效果并不好,第二种就是通过JS+CSS控制,肯定选这种了,及时是这样,也很难搜到好的教程方法。
经过一番查找,终于找到猫与向日葵博客分享的这个方法:传送门!OK,废话不说了,点击看本站效果:查看效果。
由于原文不适合新手,我特意重新整理如下:
首先加入js代码,你可以扔footer页脚:
- <script type="text/javascript">
- //夜间模式
- (function(){
- if(document.cookie.replace(/(?:(?:^|.*;\s*)night\s*\=\s*([^;]*).*$)|^.*$/, "$1") === ''){
- if(new Date().getHours() > 22 || new Date().getHours() < 6){
- document.body.classList.add('night');
- document.cookie = "night=1;path=/";
- console.log('夜间模式开启');
- }else{
- document.body.classList.remove('night');
- document.cookie = "night=0;path=/";
- console.log('夜间模式关闭');
- }
- }else{
- var night = document.cookie.replace(/(?:(?:^|.*;\s*)night\s*\=\s*([^;]*).*$)|^.*$/, "$1") || '0';
- if(night == '0'){
- document.body.classList.remove('night');
- }else if(night == '1'){
- document.body.classList.add('night');
- }
- }
- })();
- //夜间模式切换
- function switchNightMode(){
- var night = document.cookie.replace(/(?:(?:^|.*;\s*)night\s*\=\s*([^;]*).*$)|^.*$/, "$1") || '0';
- if(night == '0'){
- document.body.classList.add('night');
- document.cookie = "night=1;path=/"
- console.log('夜间模式开启');
- }else{
- document.body.classList.remove('night');
- document.cookie = "night=0;path=/"
- console.log('夜间模式关闭');
- }
- }
- </script>
其次在header页头的body加入php判断,检测到cookie相关字段直接输出body class为night,防止页面闪烁。
- <body class="<?php echo($_COOKIE['night'] == '1' ? 'night' : ''); ?>">
最后,调试CSS,body.night xxx ,xxx覆盖替换的css样式,body.night img 是把图片降低亮度,有些地方图片如果没有降低亮度,那么也像前面那样加入。
- body.night xxx{
- background-color: #263238;
- color: #aaa;
- }
- body.night img {
- filter: brightness(30%);
- }
我的css修改例子,看一下应该就懂了。
- <style>
- body.night, body.night #body, body.night .page_navi a.current {
- background-color: #263238!important;
- color: #888282!important;
- }
- body.night #sidebar, body.night .next-page a {
- background-color: #263238;
- color: #888282;
- }
- body.night #content .post p a, body.night .floor {
- color: #af8f77;
- }
- body.night .shang {
- color: #263238;
- }
- body.night .shang {
- background-color: #ab9a6d;
- }
- body.night img, body.night .icon_qq, body.night .icon_facebook, body.night .icon_rss, body.night .icon_weixin, body.night .icon_github, body.night .bozhugravatar a, body.night .left-col {
- filter: brightness(50%);
- }
- body.night a, body.night a:link, body.night a:visited {
- color: #989292;
- }
- body.night #comments form textarea, body.night #comments form input {
- background-color: #263238;
- color: #888282;
- }
- body.night #content .menufeng {
- border-bottom: 1px solid #989292;
- }
- body.night #footer, body.night #xgwz, body.night #comments {
- border-top: 1px solid #989292;
- }
- body.night #comments form textarea, body.night #comments form input, body.night #shangerweima {
- border: 1px solid #989292;
- }
- body.night #nav .menu ul{
- background: #3e4c52;
- }
- </style>
OK,只要客户端时间是22点到6点之间,就自动切换到夜间模式,你也可以用下面的代码来弄一个按钮在页面上,方便随时切换。
- <a href="javascript:switchNightMode()" target="_self">查看效果</a>
OK,结束,前面简单,后面css部分比较费时一些,如果你的主题够简单,那也很快,不然的话就得考验你耐心了。
上一篇:搬瓦工双十一VPS促销
下一篇:[转载]2018:重在参与!
挺好的!
@鸟叔 谢谢鸟叔
很实用的功能
@湛蓝色印记 夜猫专用
从来没有用过夜间模式,总感觉看着别扭。
@西城杨柳弄春柔 手机端还好,只是背景和字差异。
我是夜猫,感觉挺好的,;-)
@一抹阳光 哈哈,期待飞回来哈。
中午发出来了,我也要使劲折腾了。
@灰常记忆 好的, 加油哈。
@郑永 折腾失败 看来还是不详细
@灰常记忆 哈哈, 你还是要折腾。。。
@灰常记忆 我在国外头像显示都很正常,速度也很快,在国内一直很卡。
其实就是 2 套 css 配色吧,哈,懒得折腾,访客自己用类似 f.lux 的软件吧,经常囧文的我就不替访客操心了
@zwwooooo 嗯,我也是囧文,但不要忘了更新哈,去你那好几趟没更新,不管啥事小更一下,表示还活着哈。
好东西,先码一个,鸟哥主题的CSS太复杂了,适配好难
@aunsen 拿过来用都难
@aunsen 感谢博主分享,但是我按照教程部署之后,第一次进入网站会先打开夜间模式然后他又跳到了白天模式,具体哪里没有处理好我也不清楚,能不能帮忙解答一下,谢谢了http://xlesun.com
@Lesun 在没有cookie情况下是会黑一下,不知道是不是因为执行顺序问题,你把js的切换开关代码放后面试试。
@郑永 好的,谢谢老哥
@aunsen 博主,为啥自动晚上变黑的不自动执行额?,按钮开关的可以使用
@jdeal 我这里正常,如果你按了按钮,就会自动选择你习惯的,清楚缓存后,才可以重新自动选择。
@aunsen 为什么我切换的时候会提示:Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.
@horizon 交叉源请求仅支持协议方案,检查下代码。
我一来就看到这个“灯泡”了!体验很不错!
@明月登楼 谢谢,哈哈,老博友!
这个功能不错,有时间折腾到主题进去
@灰狼 嗯,黑了以后蓝色字有问题,很神奇,于是就批量把文章蓝色字替换掉其他颜色,哈哈。
挺好的。之前我简单的用php根据东八区自动调节主题颜色。这个方法更强大。
@老虎 你的想法也超多,哈哈,一切都是为了读者 折腾无止境。
@老虎 嗯,黑了以后蓝色字有问题,很神奇,于是就批量把文章蓝色字替换掉其他颜色,哈哈。。
我添加后发现需要刷新才会变化,这是为什么呢
@云召 哪步弄错了吧,再调试下。