雪阅模式|SNOREAD-横向滚动组件

【自用,目前还有很多BUG】 从雪阅模式 分离出来的 横向滚动组件,适用于只有纵向滚轮的鼠标。具有如下特性: 1. 在滚动页面的时候,首先会执行横向滚动,然后才是纵向。 2. 按元素大小成比例滚动,鼠标滚轮 一格 = 0.5 屏

目前為 2023-02-18 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name 雪阅模式|SNOREAD-横向滚动组件
  3. // @namespace https://userscript.snomiao.com/
  4. // @version 0.2(20191119)
  5. // @description 【自用,目前还有很多BUG】 从雪阅模式 分离出来的 横向滚动组件,适用于只有纵向滚轮的鼠标。具有如下特性: 1. 在滚动页面的时候,首先会执行横向滚动,然后才是纵向。 2. 按元素大小成比例滚动,鼠标滚轮 一格 = 0.5 屏
  6. // @author snomiao@gmail.com
  7. // @match http*://*/*
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11. (function () {
  12. "use strict";
  13. var 监听滚动 = (e) => {
  14. [...e.children].map(监听滚动);
  15. if (e.flag_已监听滚动) return;
  16. e.flag_已监听滚动 = 1;
  17.  
  18. var handleScroll = (事件) => {
  19. if (事件.altKey || 事件.ctrlKey || 事件.shiftKey) return;
  20. var scrollRate = ((事件.detail || -事件.wheelDelta) / 120) * 0.5;
  21. var scrolled_x =
  22. e.scrollLeft !=
  23. ((e.scrollLeft += scrollRate * e.clientWidth), e.scrollLeft);
  24. if (scrolled_x) {
  25. e.scrollIntoViewIfNeeded();
  26. 事件.preventDefault();
  27. 事件.stopPropagation();
  28. return false;
  29. }
  30. var scrolled_y =
  31. e.scrollTop !=
  32. ((e.scrollTop += scrollRate * e.clientHeight), e.scrollTop);
  33. if (scrolled_y) {
  34. e.scrollIntoViewIfNeeded();
  35. 事件.preventDefault();
  36. 事件.stopPropagation();
  37. return false;
  38. }
  39. // 横竖都滚到底了
  40. [...e.children].map(监听滚动);
  41. };
  42. e.addEventListener("mousewheel", handleScroll, {
  43. capture: false,
  44. passive: false,
  45. }); // Chrome/Edge
  46. e.addEventListener("DOMMouseScroll", handleScroll, {
  47. capture: false,
  48. passive: false,
  49. }); // FF
  50. };
  51. var 入口 = () => 监听滚动(document.body);
  52. document.addEventListener("load", 入口);
  53. window.addEventListener("load", 入口);
  54. 入口();
  55. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址