scroll.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. "use strict";
  2. exports.__esModule = true;
  3. exports.getScroller = getScroller;
  4. exports.getScrollTop = getScrollTop;
  5. exports.setScrollTop = setScrollTop;
  6. exports.getRootScrollTop = getRootScrollTop;
  7. exports.setRootScrollTop = setRootScrollTop;
  8. exports.getElementTop = getElementTop;
  9. exports.getVisibleHeight = getVisibleHeight;
  10. exports.getVisibleTop = getVisibleTop;
  11. function isWindow(val) {
  12. return val === window;
  13. } // get nearest scroll element
  14. // https://github.com/vant-ui/vant/issues/3823
  15. var overflowScrollReg = /scroll|auto|overlay/i;
  16. function getScroller(el, root) {
  17. if (root === void 0) {
  18. root = window;
  19. }
  20. var node = el;
  21. while (node && node.tagName !== 'HTML' && node.tagName !== 'BODY' && node.nodeType === 1 && node !== root) {
  22. var _window$getComputedSt = window.getComputedStyle(node),
  23. overflowY = _window$getComputedSt.overflowY;
  24. if (overflowScrollReg.test(overflowY)) {
  25. return node;
  26. }
  27. node = node.parentNode;
  28. }
  29. return root;
  30. }
  31. function getScrollTop(el) {
  32. var top = 'scrollTop' in el ? el.scrollTop : el.pageYOffset; // iOS scroll bounce cause minus scrollTop
  33. return Math.max(top, 0);
  34. }
  35. function setScrollTop(el, value) {
  36. if ('scrollTop' in el) {
  37. el.scrollTop = value;
  38. } else {
  39. el.scrollTo(el.scrollX, value);
  40. }
  41. }
  42. function getRootScrollTop() {
  43. return window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
  44. }
  45. function setRootScrollTop(value) {
  46. setScrollTop(window, value);
  47. setScrollTop(document.body, value);
  48. } // get distance from element top to page top or scroller top
  49. function getElementTop(el, scroller) {
  50. if (isWindow(el)) {
  51. return 0;
  52. }
  53. var scrollTop = scroller ? getScrollTop(scroller) : getRootScrollTop();
  54. return el.getBoundingClientRect().top + scrollTop;
  55. }
  56. function getVisibleHeight(el) {
  57. if (isWindow(el)) {
  58. return el.innerHeight;
  59. }
  60. return el.getBoundingClientRect().height;
  61. }
  62. function getVisibleTop(el) {
  63. if (isWindow(el)) {
  64. return 0;
  65. }
  66. return el.getBoundingClientRect().top;
  67. }