{"version":3,"file":"index.mjs","sources":["../../../../../src/hooks/use-draggable/index.ts"],"sourcesContent":["/* eslint-disable */\r\n\r\nimport { watchEffect, onBeforeUnmount } from 'vue';\r\nimport { on, off } from '../../utils/dom';\r\n\r\n// ts\r\nimport type { Ref, ComputedRef } from 'vue';\r\n\r\nexport const useDraggable = (\r\n  targetRef: Ref<HTMLElement | undefined>,\r\n  dragRef: Ref<HTMLElement | undefined>,\r\n  dragData: Record<string, any>,\r\n  draggable: ComputedRef<boolean>,\r\n  options: {\r\n    sticky: boolean;\r\n    stickyDistance: number;\r\n  }\r\n) => {\r\n  // 拖动开始\r\n  const handleMoveStart = (event: MouseEvent) => {\r\n    if (!draggable.value) {\r\n      return false;\r\n    }\r\n\r\n    const rect = targetRef.value.getBoundingClientRect();\r\n\r\n    dragData.rect = rect;\r\n\r\n    // 初始位置\r\n    dragData.x = rect.x || rect.left;\r\n    dragData.y = rect.y || rect.top;\r\n\r\n    // 当前点击在屏幕中的位置\r\n    const distance = {\r\n      x: event.clientX,\r\n      y: event.clientY,\r\n    };\r\n\r\n    dragData.dragX = distance.x;\r\n    dragData.dragY = distance.y;\r\n\r\n    // 开始拖动\r\n    dragData.dragging = true;\r\n\r\n    on(window, 'mousemove', handleMoveMove);\r\n    on(window, 'mouseup', handleMoveEnd);\r\n  };\r\n\r\n  // 拖动中\r\n  const handleMoveMove = (event: MouseEvent) => {\r\n    if (!draggable.value) {\r\n      return false;\r\n    }\r\n\r\n    // 当前鼠标在屏幕中的位置\r\n    const distance = {\r\n      x: event.clientX,\r\n      y: event.clientY,\r\n    };\r\n\r\n    // 上一个拖动值 和 拖动中的差值\r\n    const diffDistance = {\r\n      x: distance.x - dragData.dragX,\r\n      y: distance.y - dragData.dragY,\r\n    };\r\n\r\n    // 拖拽时，是否吸附屏幕边缘\r\n    if (options.sticky) {\r\n      // 视口宽度\r\n      const clientWidth = document.documentElement.clientWidth;\r\n      // 视口高度\r\n      const clientHeight = document.documentElement.clientHeight;\r\n\r\n      // 左边吸附\r\n      // 上一个拖动值 + 差值 <= 自动吸附屏幕边缘的临界距离 && diffDistance\r\n      if (\r\n        dragData.x + diffDistance.x <= options.stickyDistance &&\r\n        diffDistance.x < 0\r\n      ) {\r\n        dragData.x = 0;\r\n      }\r\n      // 右边吸附\r\n      // 上一个拖动值 + dom的宽度 - 视口宽度\r\n      else if (\r\n        dragData.x + dragData.rect.width - clientWidth >\r\n          -options.stickyDistance &&\r\n        diffDistance.x > 0\r\n      ) {\r\n        // 拖动的位置 = 视口宽度 - dom的宽度\r\n        dragData.x = clientWidth - dragData.rect.width;\r\n      } else {\r\n        dragData.x += diffDistance.x;\r\n      }\r\n\r\n      // 顶部边吸附\r\n      // 上一个拖动值 + 差值 <= 自动吸附屏幕边缘的临界距离 && diffDistance\r\n      if (\r\n        dragData.y + diffDistance.y <= options.stickyDistance &&\r\n        diffDistance.y < 0\r\n      ) {\r\n        dragData.y = 0;\r\n      }\r\n      // 底部边吸附\r\n      // 上一个拖动值 + dom的高度 - 视口宽度\r\n      else if (\r\n        dragData.y + dragData.rect.height - clientHeight >\r\n          -options.stickyDistance &&\r\n        diffDistance.y > 0\r\n      ) {\r\n        // 拖动的位置 = 视口高度 - dom的高度\r\n        dragData.y = clientHeight - dragData.rect.height;\r\n      } else {\r\n        dragData.y += diffDistance.y;\r\n      }\r\n    }\r\n    // 普通移动\r\n    else {\r\n      dragData.x += diffDistance.x;\r\n      dragData.y += diffDistance.y;\r\n    }\r\n\r\n    // 拖动位置\r\n    dragData.dragX = distance.x;\r\n    dragData.dragY = distance.y;\r\n  };\r\n\r\n  // 拖动结束\r\n  const handleMoveEnd = () => {\r\n    // 拖动结束\r\n    dragData.dragging = false;\r\n\r\n    off(window, 'mousemove', handleMoveMove);\r\n    off(window, 'mouseup', handleMoveEnd);\r\n  };\r\n\r\n  // 注册拖动\r\n  const onDraggable = () => {\r\n    if (dragRef.value) {\r\n      dragRef.value.addEventListener('mousedown', handleMoveStart);\r\n    }\r\n  };\r\n\r\n  // 销毁拖动\r\n  const offDraggable = () => {\r\n    if (dragRef.value) {\r\n      dragRef.value.removeEventListener('mousedown', handleMoveStart);\r\n    }\r\n  };\r\n\r\n  watchEffect(() => {\r\n    onDraggable();\r\n  });\r\n\r\n  // 销毁\r\n  onBeforeUnmount(() => {\r\n    offDraggable();\r\n  });\r\n};\r\n"],"names":[],"mappings":"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"}