position.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. 'use strict';
  2. Object.defineProperty(exports, '__esModule', { value: true });
  3. var core = require('@vueuse/core');
  4. const isInContainer = (el, container) => {
  5. if (!core.isClient || !el || !container)
  6. return false;
  7. const elRect = el.getBoundingClientRect();
  8. let containerRect;
  9. if (container instanceof Element) {
  10. containerRect = container.getBoundingClientRect();
  11. } else {
  12. containerRect = {
  13. top: 0,
  14. right: window.innerWidth,
  15. bottom: window.innerHeight,
  16. left: 0
  17. };
  18. }
  19. return elRect.top < containerRect.bottom && elRect.bottom > containerRect.top && elRect.right > containerRect.left && elRect.left < containerRect.right;
  20. };
  21. const getOffsetTop = (el) => {
  22. let offset = 0;
  23. let parent = el;
  24. while (parent) {
  25. offset += parent.offsetTop;
  26. parent = parent.offsetParent;
  27. }
  28. return offset;
  29. };
  30. const getOffsetTopDistance = (el, containerEl) => {
  31. return Math.abs(getOffsetTop(el) - getOffsetTop(containerEl));
  32. };
  33. const getClientXY = (event) => {
  34. let clientX;
  35. let clientY;
  36. if (event.type === "touchend") {
  37. clientY = event.changedTouches[0].clientY;
  38. clientX = event.changedTouches[0].clientX;
  39. } else if (event.type.startsWith("touch")) {
  40. clientY = event.touches[0].clientY;
  41. clientX = event.touches[0].clientX;
  42. } else {
  43. clientY = event.clientY;
  44. clientX = event.clientX;
  45. }
  46. return {
  47. clientX,
  48. clientY
  49. };
  50. };
  51. exports.getClientXY = getClientXY;
  52. exports.getOffsetTop = getOffsetTop;
  53. exports.getOffsetTopDistance = getOffsetTopDistance;
  54. exports.isInContainer = isInContainer;
  55. //# sourceMappingURL=position.js.map