index.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. (function(root) {
  2. var isOn = false;
  3. var scrollbarSize;
  4. var scrollTop;
  5. function getScrollbarSize() {
  6. if (typeof scrollbarSize !== 'undefined') return scrollbarSize;
  7. var doc = document.documentElement;
  8. var dummyScroller = document.createElement('div');
  9. dummyScroller.setAttribute('style', 'width:99px;height:99px;' + 'position:absolute;top:-9999px;overflow:scroll;');
  10. doc.appendChild(dummyScroller);
  11. scrollbarSize = dummyScroller.offsetWidth - dummyScroller.clientWidth;
  12. doc.removeChild(dummyScroller);
  13. return scrollbarSize;
  14. }
  15. function hasScrollbar() {
  16. return document.documentElement.scrollHeight > window.innerHeight;
  17. }
  18. function on(options) {
  19. if (typeof document === 'undefined' || isOn) return;
  20. var doc = document.documentElement;
  21. scrollTop = window.pageYOffset;
  22. if (hasScrollbar()) {
  23. doc.style.width = 'calc(100% - '+ getScrollbarSize() +'px)';
  24. } else {
  25. doc.style.width = '100%';
  26. }
  27. doc.style.position = 'fixed';
  28. doc.style.top = -scrollTop + 'px';
  29. doc.style.overflow = 'hidden';
  30. isOn = true;
  31. }
  32. function off() {
  33. if (typeof document === 'undefined' || !isOn) return;
  34. var doc = document.documentElement;
  35. doc.style.width = '';
  36. doc.style.position = '';
  37. doc.style.top = '';
  38. doc.style.overflow = '';
  39. window.scroll(0, scrollTop);
  40. isOn = false;
  41. }
  42. function toggle() {
  43. if (isOn) {
  44. off();
  45. return;
  46. }
  47. on();
  48. }
  49. var noScroll = {
  50. on: on,
  51. off: off,
  52. toggle: toggle,
  53. };
  54. if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
  55. module.exports = noScroll;
  56. } else {
  57. root.noScroll = noScroll;
  58. }
  59. })(this);