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

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


引言

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

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

嗐,你还别说,我真会!

网页主题快速切换原理

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

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

js 复制代码
html {
  filter: invert(1) hue-rotate(180deg);
}

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

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

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

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

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

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

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

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

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

js 复制代码
// ==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!

相关推荐
mldong7 小时前
你的 Vue3 项目也能有钉钉同款审批流设计器:npm 装包,10 分钟画出第一条审批流
前端·vue.js
2分钟速写快排7 小时前
什么是 RAG?如何用 RAG 实现一个用户记忆?
前端·后端·ai编程
passerby60618 小时前
如何自己造一个时间处理库
前端·javascript·github
走到天涯海角9 小时前
react里面的长列表渲染优化
前端·react.js·前端框架
小羊没烦恼!9 小时前
Hello Web API系列教程——Web API与国际化
java·服务器·前端·javascript·php
北岛贰10 小时前
迷茫焦虑期,我做了一个带支付带官网的 AI 聊天虚拟恋人 App
前端·人工智能·后端
mayaairi11 小时前
Vue2 组件通讯(三):全局事件总线、PubSub、插槽与组件实例属性
前端·javascript·vue.js
kyriewen12 小时前
面试官问我:AI 都能写代码了,前端凭什么还值 25K
前端·javascript·人工智能
风骏时光牛马12 小时前
AI源码分析:拆解模型底层实现逻辑
前端
IT_陈寒13 小时前
React子组件莫名其妙重渲染?你可能漏了这个Hook
前端·人工智能·后端