Pixel-Precision Wheel Scroll

Add pixel-precision wheel scrolling capability using CTRL+SHIFT+Wheel for vertical scroll, and CTRL+ALT+Wheel for horizontal scroll, for any scrollable element which can be scrolled at pixel level.

  1. // ==UserScript==
  2. // @name Pixel-Precision Wheel Scroll
  3. // @namespace https://greasyfork.org/en/users/85671-jcunews
  4. // @version 1.0.3
  5. // @license AGPL v3
  6. // @author jcunews
  7. // @description Add pixel-precision wheel scrolling capability using CTRL+SHIFT+Wheel for vertical scroll, and CTRL+ALT+Wheel for horizontal scroll, for any scrollable element which can be scrolled at pixel level.
  8. // @match *://*/*
  9. // @grant none
  10. // @run-at document-start
  11. // ==/UserScript==
  12.  
  13. addEventListener("wheel", (ev, ele) => {
  14. if (ev.ctrlKey) {
  15. ele = ev.target;
  16. while (ele && (ele.offsetWidth === ele.scrollWidth) && (ele.offsetHeight === ele.scrollHeight)) ele = ele.parentNode;
  17. ele = ele || window;
  18. if (ev.shiftKey && !ev.altKey) {
  19. ele.scrollBy(0, ev.deltaY > 0 ? 1 : -1);
  20. ev.stopPropagation();
  21. ev.preventDefault()
  22. } else if (ev.altKey && !ev.shiftKey) {
  23. ele.scrollBy(ev.deltaY > 0 ? 1 : -1, 0);;
  24. ev.stopPropagation();
  25. ev.preventDefault()
  26. }
  27. }
  28. }, {capture: true, passive: false})