已掉线,重新登录

首页 > 绿虎论坛 > 杂类 > 超级灌水 (发帖)

标题: 葫芦林这个功能怎么实现的

作者: @Ta

时间: 2022-06-20

点击: 377

网页的夜间模式跟随系统,而不是需要手动切换。(网页都支持自动夜间模式了,一堆垃圾软件都不支持)
IP:东莞


[隐藏样式|查看源码]


『回复列表(7|隐藏机器人聊天)』

1.

网页有API,反而更好做。
https://developer.mozilla.org/zh-CN/docs/Web/CSS/@media/prefers-color-scheme
小米MIX2s(白)

(/@Ta/2022-06-21 02:26//)

2.

只实现跟随系统不难,同时实现开、关和跟随系统更难一点。

JS:https://gitee.com/hu60t/hu60wap6/blob/master/src/tpl/jhin/js/hu60/header.js#L152

// 读取用户的夜间模式选择
function hu60_read_color_scheme_option() {
    var scheme = localStorage.getItem('hu60ColorScheme');
    if (!scheme) scheme = 'auto';
    return scheme;
}
// 根据用户选择和系统状态决定夜间模式是否开启
function hu60_get_color_scheme() {
    var scheme = hu60_read_color_scheme_option();
    if (scheme != 'dark' && scheme != 'light') {
        // 这里就是跟随系统,检测系统是否开启了夜间模式
        scheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
    }
    return scheme;
}
// 通过设置data属性`data-hu60-color-scheme`切换夜间模式
// 之所以可以这样切换,是因为CSS中的夜间模式配色使用了条件表达式`[data-hu60-color-scheme='dark']`
function hu60_update_color_scheme() {
    var scheme = hu60_get_color_scheme();
    document.documentElement.setAttribute('data-hu60-color-scheme', scheme);
}
function hu60_set_color_scheme(scheme) {
    localStorage.setItem('hu60ColorScheme', scheme);
    hu60_update_color_scheme();
}
// 立即执行而非在onload事件后执行,这样才能避免用户看到主题切换过程(闪烁)
hu60_update_color_scheme();
// 主题切换下拉框
window.addEventListener('load', function () {
    var scheme = hu60_read_color_scheme_option();
    var options = {auto: '跟随系统', 'dark': '开', 'light': '关'};
    var select = document.createElement("select");
    select.id = "hu60-color-scheme";
    for (var key in options) {
        var option = document.createElement("option");
        option.value = key;
        option.text = options[key];
        if (key == scheme) {
            option.selected = true;
        }
        select.appendChild(option);
    }
    var box = document.querySelector('#hu60_footer_action');
    if (!box) return;
    box.insertAdjacentText('beforeEnd', ' . 夜间模式:');
    box.appendChild(select);
    document.getElementById('hu60-color-scheme').addEventListener('change', function (ev) {
        hu60_set_color_scheme(this.value);
    });
});
// 监听系统是否开关了夜间模式,并实时做出反应
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => {
    hu60_update_color_scheme();
});

CSS:https://gitee.com/hu60t/hu60wap6/blob/master/src/tpl/classic/css/default.css

/*白天模式配色*/
:root {
  --classic-body-bg: #FFF;
  --classic-body-color: #000;
  --classic-tp-bg: #E6F3FF;
  --classic-a-color: #08C;
  --classic-hr-color: #BED8EA;
  ……
}

/*夜间模式配色*/
[data-hu60-color-scheme='dark'] {
  --classic-body-bg: #111312;
  --classic-body-color: #717372;
  --classic-tp-bg: #303030;
  --classic-a-color: #567756;
  --classic-hr-color: #995555;
  ……
}

/*使用 var(--变量名) 引用上述配色*/
body {
    word-wrap: break-word;
    word-break: break-all;
    padding: 2px 5px;
    background-color: var(--classic-body-bg);
    color: var(--classic-body-color);
    max-width: 1024px;
    margin: 0px auto;
    box-shadow: 0 0 15px var(--classic-border-shadow);
    tab-size: 4; -moz-tab-size: 4; -o-tab-size: 4; -webkit-tab-size: 4;
}

.tp {
    margin: 0px;
    background-color: var(--classic-tp-bg);
}

a {
    text-decoration: none;
    color: var(--classic-a-color);
}

hr {
    height: 1px;
    border: 1px solid var(--classic-hr-color);
    border-left: none;
    border-right: none;
}

……
(/@Ta/2022-06-21 06:09//)

3. 你这个小尾巴,还让我以为啥时候老虎闲到加这功能
(/@Ta/2022-06-21 20:27//)

4.

@老虎会游泳,我的楼层回复顺序怎么变成倒序了
小米MIX2s(白)

(/@Ta/2022-06-21 21:47//)

5.

@水木易安,也许你没锁屏点到了用户中心的切换链接。
https://hu60.cn/q.php/user.index.html

(/@Ta/2022-06-22 10:55//)

6.

@老虎会游泳,我的盲点是,网页能监听系统设置吗?还是监听了浏览器的设置?
IP:东莞

(/@Ta/2022-06-29 20:17//)

7.

@花祭,网页的所有操作都是浏览器代为实现的,所以网页确实是监听了系统的夜间模式设置,但这是浏览器先监听,然后再转达给网页的。

(/@Ta/2022-06-29 21:16//)

回复需要登录

7月5日 05:28 星期六

本站由hu60wap6驱动

备案号: 京ICP备18041936号-1