index.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. 'use strict';
  2. Object.defineProperty(exports, '__esModule', { value: true });
  3. var vue = require('vue');
  4. require('../../utils/index.js');
  5. var style = require('../../utils/dom/style.js');
  6. const useDraggable = (targetRef, dragRef, draggable) => {
  7. let transform = {
  8. offsetX: 0,
  9. offsetY: 0
  10. };
  11. const onMousedown = (e) => {
  12. const downX = e.clientX;
  13. const downY = e.clientY;
  14. const { offsetX, offsetY } = transform;
  15. const targetRect = targetRef.value.getBoundingClientRect();
  16. const targetLeft = targetRect.left;
  17. const targetTop = targetRect.top;
  18. const targetWidth = targetRect.width;
  19. const targetHeight = targetRect.height;
  20. const clientWidth = document.documentElement.clientWidth;
  21. const clientHeight = document.documentElement.clientHeight;
  22. const minLeft = -targetLeft + offsetX;
  23. const minTop = -targetTop + offsetY;
  24. const maxLeft = clientWidth - targetLeft - targetWidth + offsetX;
  25. const maxTop = clientHeight - targetTop - targetHeight + offsetY;
  26. const onMousemove = (e2) => {
  27. const moveX = Math.min(Math.max(offsetX + e2.clientX - downX, minLeft), maxLeft);
  28. const moveY = Math.min(Math.max(offsetY + e2.clientY - downY, minTop), maxTop);
  29. transform = {
  30. offsetX: moveX,
  31. offsetY: moveY
  32. };
  33. targetRef.value.style.transform = `translate(${style.addUnit(moveX)}, ${style.addUnit(moveY)})`;
  34. };
  35. const onMouseup = () => {
  36. document.removeEventListener("mousemove", onMousemove);
  37. document.removeEventListener("mouseup", onMouseup);
  38. };
  39. document.addEventListener("mousemove", onMousemove);
  40. document.addEventListener("mouseup", onMouseup);
  41. };
  42. const onDraggable = () => {
  43. if (dragRef.value && targetRef.value) {
  44. dragRef.value.addEventListener("mousedown", onMousedown);
  45. }
  46. };
  47. const offDraggable = () => {
  48. if (dragRef.value && targetRef.value) {
  49. dragRef.value.removeEventListener("mousedown", onMousedown);
  50. }
  51. };
  52. vue.onMounted(() => {
  53. vue.watchEffect(() => {
  54. if (draggable.value) {
  55. onDraggable();
  56. } else {
  57. offDraggable();
  58. }
  59. });
  60. });
  61. vue.onBeforeUnmount(() => {
  62. offDraggable();
  63. });
  64. };
  65. exports.useDraggable = useDraggable;
  66. //# sourceMappingURL=index.js.map