Firefox Hide Scrollbars

Hide Scrollbars in Firefox

当前为 2018-06-02 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Firefox Hide Scrollbars
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.0.4
  5. // @description Hide Scrollbars in Firefox
  6. // @author qashto
  7. // @match *://*/*
  8. // @grant none
  9. // @require https://code.jquery.com/jquery-3.3.1.min.js
  10. // ==/UserScript==
  11.  
  12. /*!
  13. * jQuery Mousewheel 3.1.13
  14. * https://github.com/jquery/jquery-mousewheel/edit/master/jquery.mousewheel.min.js
  15. *
  16. * Copyright jQuery Foundation and other contributors
  17. * Released under the MIT license
  18. * http://jquery.org/license
  19. */
  20. ! function(a) {
  21. 'function' == typeof define && define.amd ? define(['jquery'], a) : 'object' == typeof exports ? module.exports = a : a(jQuery)
  22. }(function(a) {
  23. function b(b) {
  24. var g = b || window.event,
  25. h = i.call(arguments, 1),
  26. j = 0,
  27. l = 0,
  28. m = 0,
  29. n = 0,
  30. o = 0,
  31. p = 0;
  32. if (b = a.event.fix(g), b.type = 'mousewheel', 'detail' in g && (m = -1 * g.detail), 'wheelDelta' in g && (m = g.wheelDelta), 'wheelDeltaY' in g && (m = g.wheelDeltaY), 'wheelDeltaX' in g && (l = -1 * g.wheelDeltaX), 'axis' in g && g.axis === g.HORIZONTAL_AXIS && (l = -1 * m, m = 0), j = 0 === m ? l : m, 'deltaY' in g && (m = -1 * g.deltaY, j = m), 'deltaX' in g && (l = g.deltaX, 0 === m && (j = -1 * l)), 0 !== m || 0 !== l) {
  33. if (1 === g.deltaMode) {
  34. var q = a.data(this, 'mousewheel-line-height');
  35. j *= q, m *= q, l *= q
  36. } else if (2 === g.deltaMode) {
  37. var r = a.data(this, 'mousewheel-page-height');
  38. j *= r, m *= r, l *= r
  39. }
  40. if (n = Math.max(Math.abs(m), Math.abs(l)), (!f || f > n) && (f = n, d(g, n) && (f /= 40)), d(g, n) && (j /= 40, l /= 40, m /= 40), j = Math[j >= 1 ? 'floor' : 'ceil'](j / f), l = Math[l >= 1 ? 'floor' : 'ceil'](l / f), m = Math[m >= 1 ? 'floor' : 'ceil'](m / f), k.settings.normalizeOffset && this.getBoundingClientRect) {
  41. var s = this.getBoundingClientRect();
  42. o = b.clientX - s.left, p = b.clientY - s.top
  43. }
  44. return b.deltaX = l, b.deltaY = m, b.deltaFactor = f, b.offsetX = o, b.offsetY = p, b.deltaMode = 0, h.unshift(b, j, l, m), e && clearTimeout(e), e = setTimeout(c, 200), (a.event.dispatch || a.event.handle).apply(this, h)
  45. }
  46. }
  47.  
  48. function c() {
  49. f = null
  50. }
  51.  
  52. function d(a, b) {
  53. return k.settings.adjustOldDeltas && 'mousewheel' === a.type && b % 120 === 0
  54. }
  55. var e, f, g = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],
  56. h = 'onwheel' in document || document.documentMode >= 9 ? ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],
  57. i = Array.prototype.slice;
  58. if (a.event.fixHooks)
  59. for (var j = g.length; j;) a.event.fixHooks[g[--j]] = a.event.mouseHooks;
  60. var k = a.event.special.mousewheel = {
  61. version: '3.1.12',
  62. setup: function() {
  63. if (this.addEventListener)
  64. for (var c = h.length; c;) this.addEventListener(h[--c], b, !1);
  65. else this.onmousewheel = b;
  66. a.data(this, 'mousewheel-line-height', k.getLineHeight(this)), a.data(this, 'mousewheel-page-height', k.getPageHeight(this))
  67. },
  68. teardown: function() {
  69. if (this.removeEventListener)
  70. for (var c = h.length; c;) this.removeEventListener(h[--c], b, !1);
  71. else this.onmousewheel = null;
  72. a.removeData(this, 'mousewheel-line-height'), a.removeData(this, 'mousewheel-page-height')
  73. },
  74. getLineHeight: function(b) {
  75. var c = a(b),
  76. d = c['offsetParent' in a.fn ? 'offsetParent' : 'parent']();
  77. return d.length || (d = a('body')), parseInt(d.css('fontSize'), 10) || parseInt(c.css('fontSize'), 10) || 16
  78. },
  79. getPageHeight: function(b) {
  80. return a(b).height()
  81. },
  82. settings: {
  83. adjustOldDeltas: !0,
  84. normalizeOffset: !0
  85. }
  86. };
  87. a.fn.extend({
  88. mousewheel: function(a) {
  89. return a ? this.bind('mousewheel', a) : this.trigger('mousewheel')
  90. },
  91. unmousewheel: function(a) {
  92. return this.unbind('mousewheel', a)
  93. }
  94. })
  95. });
  96.  
  97. $(function() {
  98. const er = console.error;
  99. const log = console.log;
  100.  
  101. $('html, body').css('overflow', 'hidden');
  102.  
  103. // https://stackoverflow.com/a/29956714/3792062
  104. $.fn.isHScrollable = function() {
  105. return this[0].scrollWidth > this[0].clientWidth;
  106. };
  107.  
  108. $.fn.isVScrollable = function() {
  109. return this[0].scrollHeight > this[0].clientHeight;
  110. };
  111.  
  112. $.fn.isScrollable = function() {
  113. return this[0].scrollWidth > this[0].clientWidth || this[0].scrollHeight > this[0].clientHeight;
  114. };
  115.  
  116. let scrollPageX = true;
  117. let scrollPageY = true;
  118.  
  119. $('html, body').mousewheel(function(event) {
  120. if (scrollPageX && scrollPageY) {
  121. event.preventDefault();
  122. }
  123. if (scrollPageX && scrollPageY && Math.abs(event.deltaX) > Math.abs(event.deltaY)) {
  124. this.scrollLeft += event.deltaX * event.deltaFactor;
  125. }
  126. if (scrollPageY && Math.abs(event.deltaX) < Math.abs(event.deltaY)) {
  127. this.scrollTop -= event.deltaY * event.deltaFactor;
  128. }
  129. log(
  130. event.deltaX,
  131. event.deltaY,
  132. event.deltaFactor,
  133. event.originalEvent.deltaMode,
  134. event.originalEvent.wheelDelta
  135. );
  136. });
  137. });