当前位置: 首页 > news >正文

B站跟随系统深色模式脚本——让你的B站体验更丝滑

本文首发于 Anyeの小站,点击 阅读原文 体验更佳!

前言

你是否厌倦了在系统开启深色模式后,打开 B 站却依然被刺眼的白色闪瞎?

B 站其实有测试版的深色模式,但它不会自动跟随系统设置。这个脚本就是为了解决这个问题而生。

它是一个轻量级的 Tampermonkey/脚本猫 脚本,核心功能是 实时监听 你系统或浏览器的深浅色模式设置 prefers-color-scheme),并自动为 B 站页面根元素添加或移除 bili_dark 类名,从而完美触发 B 站的深色模式。

核心功能一览

  • 系统同步: 完美跟随操作系统或浏览器的深浅色模式设置。

  • 实时监听: 监听系统模式变化,无需刷新页面即可切换。

  • 防抖优化: 监视 B 站自身对类名的修改,确保深色模式的稳定性。

  • 轻量高效: 代码简洁 document-start 运行,确保页面加载时即刻生效。

如何使用

脚本猫都用过吧,导入下面的脚本

// ==UserScript==
// @name         B站跟随系统深色模式
// @namespace    https://www.anye.xyz/
// @version      1.0
// @description  根据系统或浏览器深浅色模式自动触发B站测试版深色模式
// @author       Anye
// @match        *://*.bilibili.com/*
// @match        *://bilibili.com/*
// @run-at       document-start
// ==/UserScript==(function () {'use strict';const TARGET_CLASS = 'bili_dark';// 检测系统/浏览器暗色模式function isDarkMode() {return window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;}// 移除暗色类function removeBiliDark() {const el = document.documentElement;if (el && el.classList.contains(TARGET_CLASS)) {el.classList.remove(TARGET_CLASS);console.info('[脚本] 已移除 bili_dark');}}// 添加暗色类function addBiliDark() {const el = document.documentElement;if (el && !el.classList.contains(TARGET_CLASS)) {el.classList.add(TARGET_CLASS);console.info('[脚本] 已添加 bili_dark');}}// 根据当前系统模式设置function applyMode() {if (isDarkMode()) {addBiliDark();} else {removeBiliDark();}}// 页面初始立即应用applyMode();// 监听系统深浅色模式变化if (window.matchMedia) {window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', applyMode);}// 监视B站自己修改类名const observer = new MutationObserver(() => {applyMode();});observer.observe(document.documentElement, { attributes: true, attributeFilter: ['class'] });})();

脚本解析

整个脚本的核心逻辑非常清晰,主要围绕以下几个步骤展开:

1. 定义目标类名: const TARGET_CLASS = 'bili_dark'; 这是 B 站深色模式的触发开关。

2. 判断系统模式: isDarkMode() 函数利用 window.matchMedia('(prefers-color-scheme: dark)') 来获取当前系统的深浅色偏好。

3. 应用模式: applyMode() 函数根据 isDarkMode() 的结果,调用 addBiliDark()removeBiliDark() 来操作 <html> 元素的 class 列表。

4. 即时生效: applyMode() 在脚本加载后立即执行一次,确保页面初次加载时即为正确模式。

5. 监听变化(系统): 通过 window.matchMedia(...).addEventListener('change', applyMode) 监听系统设置的实时变化,实现无需刷新页面的动态切换。

6. 监听变化(B站内部): 使用 MutationObserver 监视 <html> 元素的 class 属性变化。这是为了防止 B 站自身的 JavaScript 逻辑在页面加载后移除或添加 bili_dark 类名,从而保证脚本设置的持久性。

通过这种方式,我们确保了 B 站的深色模式能够 完全且稳定地 跟随你的系统设置。

本文 AI 率

90%

http://www.dtcms.com/a/567002.html

相关文章:

  • Wordpress 手机网站自己做的网站如何让别的网可以查看
  • 织梦网站怎么上传视频广州地铁运营时间
  • 如何自己做网站赚钱前段 网站建设实例
  • 做3d建模贴图找哪个网站广安北京网站建设
  • 电脑做会计从业题目用什么网站数据分析师要学什么
  • 下载 | Win11 官方精简版,系统占用空间极少!(10月末更新、Win 11 IoT物联网 LTSC版、适合老电脑安装使用)
  • langchain_agent智能体
  • 表3-5企业网站建设可行性分析北京网站建设建站公司
  • 网站成功秘诀专业团队下一句
  • seo网站收录工具上海网站开发外包
  • 咖啡店网站首页怎么做手机网站服务器
  • 郑州专业的网站建设wordpress的文件夹
  • 学做视频的网站有哪些内容百度模拟点击软件判刑了
  • 网站建设 企业企业注册号
  • 网站开发平台金华建站模板
  • 如何设计一个秒杀系统(上)
  • 舟山手机网站建设红河州seo怎么做整站排名
  • 网站建设 广西效果图网站名字
  • 韩国做美食网站有哪些第二季企业网站开发
  • git worktree (镜像站加速)
  • 去哪找网站建设公司互联网+创业项目ppt成品
  • 上海市普陀区建设规划局网站tomcat做静态网站
  • 韶关建设局网站营销型企业网站建站
  • 河北定制网站建设调试360建筑网发布的信息怎么删除
  • 学习笔记记录记录
  • 布吉网站设计馆陶网站建设电话
  • 东莞勒流网站制作seo网站排名优化服务
  • 郑州网站建设搜索优化使用wordpress在ec2上建网站
  • 企业网站建设推荐乐云seo物联网方案设计与实现
  • 拓尔思网站建设公司sentos上部署.net网站