JS 36 - 新增并记录网页的偏好颜色模式

大家好!

今天我们要实作网页的深浅色模式。
我们进入今天的主题吧!


样式

body {
    background-color: #fafafa;
    color: #323232;
    transition: background-color 0.5s,
                color 0.5s;
}

body[data-color-scheme="dark"] {
    background-color: #323232;
    color: #fafafa;
}

程序码

window.addEventListener('load', function () {
    const data = 'data-color-scheme';
    let scheme = window.localStorage ? localStorage.getItem(data) : null;
    if (scheme !== 'light' || scheme !== 'dark') {
        const dark = '(prefers-color-scheme: dark)';
        scheme = window.matchMedia ? (matchMedia(dark).matches ? 'dark' : 'light') : 'light';
    }
    /* 网页载入後执行一次 */
    shift();
    /* 点击按钮後切换模式 */
    Felix('#switch').on('click', shift);
    function shift(e) {
        if (e) scheme = scheme === 'dark' ? 'light' : 'dark';
        Felix('body')[0].setAttribute(data, scheme);
        if (window.localStorage) localStorage.setItem(data, scheme);
    }
});

实测

范例连结制作中。


差不多也到尾声了。
如果对文章有任何疑问,也欢迎在下方提问和建议!
我是 Felix,我们明天再见!


<<:  Day36 ATT&CK for ICS - Impact(2)

>>:  “Work Smart” vs “Work Hard”? (单选题)

延伸(1)-ML接入团队的原本开发生态 | ML#Day29

背景提要 团队走DevOps文化,所以频繁地沟通理解,以及任何东西考虑对於系统的定位,已经是我们再熟...

[Day27] - Django-REST-Framework API 期末专案实作 (二)

接续昨天的专案,创建好负责管理资料库的 model 之後,接着我们今天要来建立 Serializer...

聊天室(上)- 客制元件Xib建立

缘由: 聊天室优化时有几个的地方我花比较多时间,我先列举一下: 1. 可以在送出的讯息中插入自订的表...

Day29:今天来聊一下CEH中讲的Cryptography

随着Internet越来越多地使用在商业和个人通讯,保护敏感讯息(例如:信用卡和 个人识别码(PIN...

DAY25: 作用域三种类

在这一篇主要讲了Node 在终机端和脚本文件this不同的指向,那麽今天要来简单介绍Nodejs作用...