智慧水务管理系统 - 精河县供水工程综合管理平台

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
  2. require("../../_virtual/_rolldown/runtime.js");
  3. const require_style = require("../../utils/dom/style.js");
  4. let lodash_unified = require("lodash-unified");
  5. let vue = require("vue");
  6. //#region ../../packages/hooks/use-draggable/index.ts
  7. const useDraggable = (targetRef, dragRef, draggable, overflow) => {
  8. const transform = {
  9. offsetX: 0,
  10. offsetY: 0
  11. };
  12. const isDragging = (0, vue.ref)(false);
  13. const adjustPosition = (moveX, moveY) => {
  14. if (targetRef.value) {
  15. const { offsetX, offsetY } = transform;
  16. const targetRect = targetRef.value.getBoundingClientRect();
  17. const targetLeft = Math.max(targetRect.left, 0);
  18. const targetTop = Math.max(targetRect.top, 0);
  19. const targetWidth = targetRect.width;
  20. const targetHeight = targetRect.height;
  21. const clientWidth = document.documentElement.clientWidth;
  22. const clientHeight = document.documentElement.clientHeight;
  23. const minLeft = -targetLeft + offsetX;
  24. const minTop = -targetTop + offsetY;
  25. const maxLeft = clientWidth - targetLeft - targetWidth + offsetX;
  26. const maxTop = clientHeight - targetTop - (targetHeight < clientHeight ? targetHeight : 0) + offsetY;
  27. if (!overflow?.value) {
  28. moveX = (0, lodash_unified.clamp)(moveX, minLeft, maxLeft);
  29. moveY = (0, lodash_unified.clamp)(moveY, minTop, maxTop);
  30. }
  31. transform.offsetX = moveX;
  32. transform.offsetY = moveY;
  33. targetRef.value.style.transform = `translate(${require_style.addUnit(moveX)}, ${require_style.addUnit(moveY)})`;
  34. }
  35. };
  36. const onMousedown = (e) => {
  37. const downX = e.clientX;
  38. const downY = e.clientY;
  39. const { offsetX, offsetY } = transform;
  40. const onMousemove = (e) => {
  41. if (!isDragging.value) isDragging.value = true;
  42. adjustPosition(offsetX + e.clientX - downX, offsetY + e.clientY - downY);
  43. };
  44. const onMouseup = () => {
  45. isDragging.value = false;
  46. document.removeEventListener("mousemove", onMousemove);
  47. document.removeEventListener("mouseup", onMouseup);
  48. };
  49. document.addEventListener("mousemove", onMousemove);
  50. document.addEventListener("mouseup", onMouseup);
  51. };
  52. const onDraggable = () => {
  53. if (dragRef.value && targetRef.value) {
  54. dragRef.value.addEventListener("mousedown", onMousedown);
  55. window.addEventListener("resize", updatePosition);
  56. }
  57. };
  58. const offDraggable = () => {
  59. if (dragRef.value && targetRef.value) {
  60. dragRef.value.removeEventListener("mousedown", onMousedown);
  61. window.removeEventListener("resize", updatePosition);
  62. }
  63. };
  64. const resetPosition = () => {
  65. transform.offsetX = 0;
  66. transform.offsetY = 0;
  67. if (targetRef.value) targetRef.value.style.transform = "";
  68. };
  69. const updatePosition = () => {
  70. const { offsetX, offsetY } = transform;
  71. adjustPosition(offsetX, offsetY);
  72. };
  73. (0, vue.onMounted)(() => {
  74. (0, vue.watchEffect)(() => {
  75. if (draggable.value) onDraggable();
  76. else offDraggable();
  77. });
  78. });
  79. (0, vue.onBeforeUnmount)(() => {
  80. offDraggable();
  81. });
  82. return {
  83. isDragging,
  84. resetPosition,
  85. updatePosition
  86. };
  87. };
  88. //#endregion
  89. exports.useDraggable = useDraggable;
  90. //# sourceMappingURL=index.js.map