position.js 1.6 KB

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