scroll.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. "use strict";
  2. exports.__esModule = true;
  3. exports.getScrollEventTarget = getScrollEventTarget;
  4. exports.getScrollTop = getScrollTop;
  5. exports.setScrollTop = setScrollTop;
  6. exports.getRootScrollTop = getRootScrollTop;
  7. exports.getElementTop = getElementTop;
  8. exports.getVisibleHeight = getVisibleHeight;
  9. // get nearest scroll element
  10. // http://w3help.org/zh-cn/causes/SD9013
  11. // http://stackoverflow.com/questions/17016740/onscroll-function-is-not-working-for-chrome
  12. function getScrollEventTarget(element, rootParent) {
  13. if (rootParent === void 0) {
  14. rootParent = window;
  15. }
  16. var node = element;
  17. while (node && node.tagName !== 'HTML' && node.tagName !== 'BODY' && node.nodeType === 1 && node !== rootParent) {
  18. var _window$getComputedSt = window.getComputedStyle(node),
  19. overflowY = _window$getComputedSt.overflowY;
  20. if (overflowY === 'scroll' || overflowY === 'auto') {
  21. return node;
  22. }
  23. node = node.parentNode;
  24. }
  25. return rootParent;
  26. }
  27. function getScrollTop(element) {
  28. return 'scrollTop' in element ? element.scrollTop : element.pageYOffset;
  29. }
  30. function setScrollTop(element, value) {
  31. 'scrollTop' in element ? element.scrollTop = value : element.scrollTo(element.scrollX, value);
  32. }
  33. function getRootScrollTop() {
  34. return window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
  35. } // get distance from element top to page top
  36. function getElementTop(element) {
  37. return (element === window ? 0 : element.getBoundingClientRect().top) + getScrollTop(window);
  38. }
  39. function getVisibleHeight(element) {
  40. return element === window ? element.innerHeight : element.getBoundingClientRect().height;
  41. }