TopScroll

Быстрая прокрутка страницы вверх/вниз.

  1. // ==UserScript==
  2. // @name TopScroll
  3. // @description Быстрая прокрутка страницы вверх/вниз.
  4. // @namespace https://forum.mozilla-russia.org/viewtopic.php?pid=719386#p719386
  5. // @include *
  6. // @version 1.0
  7. // ==/UserScript==
  8.  
  9. topScroll = {
  10.  
  11. injectDiv: function() {
  12. var body = document.getElementsByTagName("body")[0];
  13. var div = document.createElement("div");
  14. div.id = "topscroll-chrome-extension-bar";
  15. div.setAttribute("style", "position: fixed !important; top: 0 !important; left: 0 !important; bottom: 0 !important; margin: 0 !important; padding: 0 !important; width: 5px !important; height: 100% !important; border-style: none !important; box-shadow: none !important; opacity: 0 !important; z-index: 2147483647 !important;");
  16. div.onclick = topScroll.scrollUp;
  17. div.oncontextmenu = topScroll.scrollDown;
  18. body.appendChild(div);
  19. },
  20.  
  21. scrollUp: function() {
  22. if (window.pageYOffset === 0) {
  23. topScroll.scrollTo(topScroll.lastScrollPosition);
  24. topScroll.lastScrollPosition = 0;
  25. } else {
  26. topScroll.lastScrollPosition = window.pageYOffset;
  27. topScroll.scrollTo(0);
  28. }
  29. },
  30.  
  31. scrollDown: function() {
  32. var bottomOffset = document.documentElement.scrollHeight - window.innerHeight;
  33. if (window.pageYOffset === bottomOffset) {
  34. topScroll.scrollTo(topScroll.lastScrollPosition);
  35. topScroll.lastScrollPosition = bottomOffset;
  36. } else {
  37. topScroll.lastScrollPosition = window.pageYOffset;
  38. topScroll.scrollTo(bottomOffset);
  39. }
  40. return false; // Prevent context menu appearing
  41. },
  42.  
  43. scrollTo: function(endY) {
  44. var duration = 150;
  45. var startY = window.scrollY;
  46. var distance = Math.max(endY,0) - startY;
  47. var startTime = new Date().getTime();
  48. (function loopScroll() {
  49. setTimeout(function () {
  50. var p = Math.min((new Date().getTime() - startTime) / duration, 1); // Progress 0→1
  51. var y = Math.max(Math.floor(startY + distance*(p < 0.5 ? 2*p*p : p*(4 - p*2)-1)), 0);
  52. window.scrollTo(window.pageXOffset, y);
  53. if (p < 1) {
  54. loopScroll();
  55. }
  56. }, 1)
  57. })();
  58. }
  59. };
  60.  
  61. topScroll.injectDiv();