被对象嘲讽,写个网页护眼宝你都不会么

首页 编程分享 JQUERY丨JS丨VUE 正文

石小石Orz 转载 编程分享 2025-06-17 20:12:46

简介 引言 最近对象天天晚上加班看网页,眼睛一直不舒服,然后她就想下一个护眼包,让网页不那么亮。然后,她的电脑就就自动安装了很多软件,什么小鸟壁纸、360浏览器、金山毒霸、2345、鲁大师...... 嗐,


大家好,我是石小石!一个热爱技术分享的开源社区贡献者,小册《油猴脚本实战指南》作者。


引言

最近对象天天晚上加班看网页,眼睛一直不舒服,然后她就想下一个护眼包,让网页不那么亮。然后,她的电脑就就自动安装了很多软件,什么小鸟壁纸、360浏览器、金山毒霸、2345、鲁大师......

再然后,她就生气的对我说,你不是开发网页的么,就不能给我开发个网页护眼工具么!

嗐,你还别说,我真会!

网页主题快速切换原理

网页护眼,不就是实现网页主题切换嘛!前几天,前端梦工厂大佬分享了一篇文章,就介绍了一种非常简单高效实现网页主题切换的效果。

它的原理非常简单,只需要一行代码就实现任意网页的主题切换

html {
  filter: invert(1) hue-rotate(180deg);
}

CSS 的 filter(滤镜)属性可以为网页元素添加图像效果,例如模糊、反色或色调变化等。其中,filter: invert(1) hue-rotate(180deg) 是一组常用于暗黑模式的滤镜组合:

  • invert(1) 会将颜色进行反转,使亮色变暗;
  • hue-rotate(180deg) 调整颜色的色调,避免纯反色带来的不自然感。

结合这两个滤镜效果,我们可以快速实现整个网页的颜色切换,从而达到一键切换主题的目的。

但是,这个方法有一定瑕疵,图片和视频也会被整体反转造成色彩失真,但可以为 imgvideo 元素单独指定反向滤镜,使其颜色恢复正常

/*图片、视频等元素不需要处理*/
img, 
video,
.logo,
.icon /*可继续添加可以不用处理的元素*/ {
  filter: invert(1) hue-rotate(180deg);
}

使用油猴脚本为任意网页增加主题切换按钮

要想上述的效果能快速应用到任意网站,我们必须要借助谷歌浏览器的一个插件———油猴!它允许用户在网页加载时注入自定义的 JavaScript 脚本,来增强、修改或自动化网页行为

如果你对油猴不够了解,可以参考我的文章:juejin.cn/book/751468…

借助油猴,我们能很轻松实现一个主题切换脚本

// ==UserScript==
// @name         一键暗黑换肤
// @namespace    http://tampermonkey.net/
// @version      0.0.1
// @description  使用CSS滤镜快速切换网页为暗黑风格
// @author       石小石Orz
// @match        *://*/*
// @grant        GM_addStyle
// @grant        GM_addElement
// ==/UserScript==

(function () {
  'use strict';

  // 注入样式,初始时不开启
  GM_addStyle(`
    html.dark-mode {
      filter: invert(0.9) hue-rotate(180deg);
      background: #111 !important;
    }
    html.dark-mode img, html.dark-mode video {
      filter: invert(1) hue-rotate(180deg);
    }
  `);

  // 添加切换按钮
  const toggleBtn = GM_addElement(document.body,'button', {
    textContent: '主题切换',
    style: 'position:fixed;bottom:20px;right:20px;z-index:9999;padding:8px 12px;background:#444;color:white;border:none;border-radius:5px;cursor:pointer;',
  });

  // 点击切换模式并更新按钮文字
  toggleBtn.addEventListener('click', () => {
    const isDark = document.documentElement.classList.toggle('dark-mode');
  });
})();

上述脚本非常简单,通过GM_addStyle向网页注入了全局样式、通过GM_addElement创建一个全局按钮,实现点击切换主题。

如果你对系统的油猴脚本开发感兴趣,参考我的小册-油猴脚本实战开发指南

然而,对象对我开发的脚本并不满意,她嫌我的按钮在网页右下角,挡住了她操作网页。没办法,又给他修改了一版,按钮支持拖拽移动,而且在其他页面能同步更新按钮位置

当然,自动同步更新位置的功能是借助油猴API实现的,原生JS很难实现这个效果。

这一版主题切换工具,对象终于满意了!

油猴脚本YYDS!

转载链接:https://juejin.cn/post/7516369217770029096


Tags:


本篇评论 —— 揽流光,涤眉霜,清露烈酒一口话苍茫。


    声明:参照站内规则,不文明言论将会删除,谢谢合作。


      最新评论




ABOUT ME

Blogger:袅袅牧童 | Arkin

Ido:PHP攻城狮

WeChat:nnmutong

Email:nnmutong@icloud.com

标签云