封装指令
const vDraggable = {
mounted(el) {
let pos1 = 0,
pos2 = 0,
pos3 = 0,
pos4 = 0;
el.onmousedown = dragMouseDown;
function dragMouseDown(e) {
e = e || window.event;
e.preventDefault();
// 获取鼠标位置
pos3 = e.clientX;
pos4 = e.clientY;
document.onmouseup = closeDragElement;
document.onmousemove = elementDrag;
}
function elementDrag(e) {
e = e || window.event;
e.preventDefault();
// 计算新位置
pos1 = pos3 - e.clientX;
pos2 = pos4 - e.clientY;
pos3 = e.clientX;
pos4 = e.clientY;
// 设置元素新位置
el.style.top = el.offsetTop - pos2 + 'px';
el.style.left = el.offsetLeft - pos1 + 'px';
}
function closeDragElement() {
// 停止移动
document.onmouseup = null;
document.onmousemove = null;
}
},
};
使用
<div v-draggable class="draggable">
使用指令拖动的 Div (Vue 3)
</div>