网站夜间模式的实现思路与详细教程分享

发布于 2020-01-13

网站夜间模式的实现思路与详细教程分享

网站夜间模式是怎样实现的?

整体思路

夜间模式开关按钮:用来手动切换夜间模式的,会存储cookie。
自动夜间模式:当cookie为空时,浏览器时间大于22点小于6点时会自动进入夜间模式,并存储cookie。
后端配合:php判断是否有cookie,有的话直接输出夜间css,避免切换页面时网页闪烁。

具体操作

引入黑夜 css

<link href=”dark.css” rel=”alternate stylesheet” type=”text/css” title=”dark”>

有title熟悉rel属性值同时包含alternate stylesheet的<link>作为备选样式CSS文件加载,默认不渲染。

切换夜间模式的 js 函数

function switchNightMode(){
    var night = document.cookie.replace(/(?:(?:^|.*;\s*)night\s*\=\s*([^;]*).*$)|^.*$/, "$1") || '0';
    if(night == '0'){
        document.querySelector('link[title="dark"]').disabled = true;
        document.querySelector('link[title="dark"]').disabled = false;
        document.cookie = "night=1;path=/"
        console.log('夜间模式开启');
    }else{
        document.querySelector('link[title="dark"]').disabled = true;
        document.cookie = "night=0;path=/"
        console.log('夜间模式关闭');
    }
}

指定时间进入夜间模式

(function(){
    if(document.cookie.replace(/(?:(?:^|.*;\s*)night\s*\=\s*([^;]*).*$)|^.*$/, "$1") === ''){
        if(new Date().getHours() > 22 || new Date().getHours() < 6){
        document.querySelector('link[title="dark"]').disabled = true;
        document.querySelector('link[title="dark"]').disabled = false;
        document.cookie = "night=1;path=/"
        console.log('夜间模式开启');
        }else{
        document.cookie = "night=0;path=/"
        console.log('夜间模式关闭');
        }
    }else{
        var night = document.cookie.replace(/(?:(?:^|.*;\s*)night\s*\=\s*([^;]*).*$)|^.*$/, "$1") || '0';
        if(night == '0'){
        document.querySelector('link[title="dark"]').disabled = true;
        console.log('夜间模式关闭');
        }else if(night == '1'){
        document.querySelector('link[title="dark"]').disabled = true;
        document.querySelector('link[title="dark"]').disabled = false;
        console.log('夜间模式开启');

        }
    }
})();

php 后端判断 cookie 进行加载 css

<link href="dark.css" rel="<?php if($_COOKIE['night'] != '1'){echo 'alternate ';} ?>stylesheet" type="text/css" title="dark">
喜欢 1
奋楫笃行,臻于至善!

相关文章

基于 canvas 一款非常酷炫的动态气泡背景实现方法

canvas 是 HTML5 新增的标签,利用它我们可以轻松实现图形的绘制。canvas 元素本身并没有绘制能力,它只是一个图形的容器,必须使用脚本(通常是 JavaScript)配合来完成绘图任务。...
阅读全文

基于 sketch.js 实现非常酷炫的鼠标点击特效

JavaScript 是浏览器端脚本语言,有许多非常实用的第三方 JS 类库,我们可以借助它来实现各种各样的特效,今天为大家分享一下基于 sketch.js 实现鼠标点击特效的方法。 实现方法 实现的...
阅读全文

pace.js 网页自动加载进度条 JavaScript 插件

我们在浏览网页的时候,经常会看到网站顶部有一个好看的加载进度条,我们可能会好奇它是怎样实现的。页面的加载进度百分比,有时候获取是比较麻烦的,当然也可以利用一些优秀的JavaScript插件来实现,今天...
阅读全文

Vue.js 开发环境搭建及实例运行简明教程

Vue和jQuery一样,是一个前端框架,如果你要问在过去的一年里,前端技术框架什么最火,那无疑就是前端三巨头:React、Angular和Vue。今天,我们就一起来简单了解一下什么是Vue,以及它的...
阅读全文

nofollow、noopener 和 noreferrer 的区别与联系

大家应该都知道rel='nofllow'的作用,它是告诉搜索引擎,不要将该链接计入权重。因此多数情况下,我们可以将一些不想传递权重的链接进行nofllow处理,例如一些非本站的链接,不想传递权重,但是...
阅读全文

使用 Prism.js 实现代码语法高亮

之前给大家推荐过两款代码高亮库,分别是 code-prettify 和 Crayon Syntax Highlighter,今天给大家推荐的是另一个代码高亮库Prism.js。 一、介绍 Prism...
阅读全文

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注