Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/MaxChang3/Bilibili-Trackpad-Scroll-Reverser
Scroll Reverser for videos on bilibili. 优化 b 站视频音量调节在触控板上的体验。使用触控板优雅的调节视频音量。向上则增、向下则减。
https://github.com/MaxChang3/Bilibili-Trackpad-Scroll-Reverser
bilibili tampermonkey tampermonkey-userscript userscript
Last synced: about 2 months ago
JSON representation
Scroll Reverser for videos on bilibili. 优化 b 站视频音量调节在触控板上的体验。使用触控板优雅的调节视频音量。向上则增、向下则减。
- Host: GitHub
- URL: https://github.com/MaxChang3/Bilibili-Trackpad-Scroll-Reverser
- Owner: maxchang3
- License: mit
- Created: 2023-03-09T18:34:11.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-04-24T17:49:59.000Z (8 months ago)
- Last Synced: 2024-08-01T02:26:05.063Z (4 months ago)
- Topics: bilibili, tampermonkey, tampermonkey-userscript, userscript
- Language: TypeScript
- Homepage:
- Size: 378 KB
- Stars: 5
- Watchers: 1
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-bilibili-extra - Bilibili-Trackpad-Scroll-Reverser - 优化 b 站视频音量调节在触控板上的体验. (油猴脚本 / 主站脚本)
README
# 哔哩哔哩触控板滚动反转
# Bilibili-Trackpad-Scroll-Reverser> 自然滚动下,音量的调节应该也是自然的。
优化 b 站视频音量调节在触控板上的体验。使用此脚本后,在 b 站视频全屏界面中,使用触控板向下滚动将减少音量。(未安装时为增大)
一般情况下,触控板的滚动语义是这样的:向上滚动时候,其意味着「展示下面的信息」。由于这种操作和现实的逻辑相同,也被称为自然滚动。而鼠标则是向上滚动则意味着「回到上方的信息」*。因此同一个方向的操作下,就得到了不同的结果。
然而,在音量调节的时候二者的语义则得到了统一:「向上就是升高,向下就是降低」。
由此则需要判断是否为触控板,再对其进行不同的处理。不过由于目前浏览器的 API 所限,目前仍然没有可以完美区别触控板和鼠标的方式。
* macOS 默认情况下鼠标和触控板的「自然滚动」是统一设置的,但是对于许多非 Magic Mouse 用户仍会使用诸如 Scroll Reserver/鼠标自带驱动 之类的第三方工具来实现分别设置。
## 安装
[[Greasyfork](https://greasyfork.org/zh-CN/scripts/432783)]
[[Github Release](https://github.com/MaxChang3/Bilibili-Trackpad-Scroll-Reverser/releases/latest/download/bilibili-trackpad-scroll-reverser.user.js)]
[[Github Pages](https://maxchang3.github.io/Bilibili-Trackpad-Scroll-Reverser/bilibili-trackpad-scroll-reverser.user.js)]## 建议
初始化时提供两个选项:「简单」与 「矫正」。
简单模式:粗暴地认为 `deltaY` 值低于 `100` 的为触控板。仅对于细微调节适用。移动过快时,会导致判断中间出错。
矫正模式:根据提示滚动鼠标滚轮选择最小整数 `deltaY`。 除去这个数值外,如果是浮点数则为鼠标,整数值则为触控板。
**对于 macOS(Chorme/Safari),推荐使用「矫正模式」。**
**对于未开启平滑滚动的情况下的 Windows 设备、所有平台的 Firefox 浏览器下,目前暂时推荐使用「简单模式」。**
后续会在初始化流程自动引导该设置。
## 实现原理
Hook `EventTarget.prototype.addEventListener` 拦截对应的 `mousewheel` 事件。~~(为什么不用 `wheel`!)~~
判断是否为触控板,添加代理拦截 [wheelDelta](https://developer.mozilla.org/en-US/docs/Web/API/Element/mousewheel_event) 值,取相反数(这里直接取 [deltaY](https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent/deltaY) 后做一定计算处理,他与 `wheelDelta` 正负相异)后返回。
## 触控板判断逻辑
> ⚠️ 由于硬件、浏览器差异,可能会有完全不同的表现,未作大范围测试,如有问题,欢迎反馈!
> 目前的逻辑是判断出鼠标,反过来得知触控板,鼠标测试硬件均为 Logitech MX Anywhere2s。
### macOS [1][2]
1.鼠标滚轮推动下的 `deltaY` 存在一个**最小整数值**,除去这个值之外的其他值大概率为浮点数,并且小数点后较为复杂。形如:`235.867919921875`。
2.触控板大部分情况下为整数,存在为浮点数的触控板,但是一般也不会很复杂。形如:`2.5`。
因此,采取人工矫正的方式,使用鼠标的最低刻度推动获取一个最低的整数 `deltaY`。除去这个值外的所有数值,都根据是否为整数[3]进行判断,是则为触控板,否则为鼠标。目前经过一段时间测试,效果良好。
### Windows[4]
1.未开启平滑滚动的情况下。通过不同的力度,仅能得到几个整数值。最低为 100。高至 600.
2.开启平滑滚动的情况下,数值为分布在 1 左右的浮点数。
因此,对于 Windows 目前推荐使用简单模式。
[1] 仅 Chrome / Safari,Firefox 下全部为整数值。
[2] 仅有限测试于 macOS 13.2.1(MacBook Air M1)
[3] 由于 2 的原因,对 `deltaY` 做乘 2 处理避免这种情况。目前测试设备有限,未来可能会有所变动。
[4] 仅有限测试于 Windows 11(LEGION R7000)
## 更新日志
### 2.0
2023年3月10日
- 移植到 TypeScript
- 使用 [vite-plugin-monkey](https://github.com/lisonge/vite-plugin-monkey) 进行工程化开发
- 直接 Hook 事件监听,无需手工添加元素
- 使用 Proxy 重构
- 修改全屏判断逻辑2.0 前更新日志
### 1.0
2022年8月27日
- 整理代码### 0.8
2022年8月27日
- 重构大部分代码,适配新版播放页### 0.7
2021年9月23日
- 修改全屏判断### 0.6
2021年9月23日- 优化判断
- 全屏下进行接管### 0.5
2021年9月23日- 支持番剧页面
- 优化部分代码#### 0.1 - 0.4
2021年9月22日 - 2021年9月23日- 项目基本功能和完善