'use strict';
|
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
var vue = require('vue');
|
require('../../utils/index.js');
|
var style = require('../../utils/dom/style.js');
|
|
const useDraggable = (targetRef, dragRef, draggable) => {
|
let transform = {
|
offsetX: 0,
|
offsetY: 0
|
};
|
const onMousedown = (e) => {
|
const downX = e.clientX;
|
const downY = e.clientY;
|
const { offsetX, offsetY } = transform;
|
const targetRect = targetRef.value.getBoundingClientRect();
|
const targetLeft = targetRect.left;
|
const targetTop = targetRect.top;
|
const targetWidth = targetRect.width;
|
const targetHeight = targetRect.height;
|
const clientWidth = document.documentElement.clientWidth;
|
const clientHeight = document.documentElement.clientHeight;
|
const minLeft = -targetLeft + offsetX;
|
const minTop = -targetTop + offsetY;
|
const maxLeft = clientWidth - targetLeft - targetWidth + offsetX;
|
const maxTop = clientHeight - targetTop - targetHeight + offsetY;
|
const onMousemove = (e2) => {
|
const moveX = Math.min(Math.max(offsetX + e2.clientX - downX, minLeft), maxLeft);
|
const moveY = Math.min(Math.max(offsetY + e2.clientY - downY, minTop), maxTop);
|
transform = {
|
offsetX: moveX,
|
offsetY: moveY
|
};
|
targetRef.value.style.transform = `translate(${style.addUnit(moveX)}, ${style.addUnit(moveY)})`;
|
};
|
const onMouseup = () => {
|
document.removeEventListener("mousemove", onMousemove);
|
document.removeEventListener("mouseup", onMouseup);
|
};
|
document.addEventListener("mousemove", onMousemove);
|
document.addEventListener("mouseup", onMouseup);
|
};
|
const onDraggable = () => {
|
if (dragRef.value && targetRef.value) {
|
dragRef.value.addEventListener("mousedown", onMousedown);
|
}
|
};
|
const offDraggable = () => {
|
if (dragRef.value && targetRef.value) {
|
dragRef.value.removeEventListener("mousedown", onMousedown);
|
}
|
};
|
vue.onMounted(() => {
|
vue.watchEffect(() => {
|
if (draggable.value) {
|
onDraggable();
|
} else {
|
offDraggable();
|
}
|
});
|
});
|
vue.onBeforeUnmount(() => {
|
offDraggable();
|
});
|
};
|
|
exports.useDraggable = useDraggable;
|
//# sourceMappingURL=index.js.map
|