vue中实现元素在界面中自由拖动
这是一个使用 Vue 2 实现可拖动 div 的示例。
<!DOCTYPE html>
<html>
<head>
<title>Vue 2 可拖动 Div</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
<style>
#draggable-div {
position: absolute;
width: 200px;
height: 200px;
background-color: #4CAF50;
color: white;
text-align: center;
line-height: 200px;
cursor: move;
user-select: none;
}
</style>
</head>
<body>
<div id="app">
<div
id="draggable-div"
@mousedown="startDrag"
:style="{ left: `${posX}px`, top: `${posY}px` }"
>
拖动我
</div>
</div>
<script>
new Vue({
el: '#app',
data: {
posX: 100,
posY: 100,
isDragging: false,
offsetX: 0,
offsetY: 0
},
methods: {
startDrag(event) {
this.isDragging = true;
// 计算鼠标点击位置与 div 左上角的偏移
this.offsetX = event.clientX - this.posX;
this.offsetY = event.clientY - this.posY;
// 添加全局事件监听
document.addEventListener('mousemove', this.onDrag);
document.addEventListener('mouseup', this.stopDrag);
},
onDrag(event) {
if (this.isDragging) {
// 更新 div 位置
this.posX = event.clientX - this.offsetX;
this.posY = event.clientY - this.offsetY;
}
},
stopDrag() {
this.isDragging = false;
// 移除全局事件监听
document.removeEventListener('mousemove', this.onDrag);
document.removeEventListener('mouseup', this.stopDrag);
}
}
});
</script>
</body>
</html>
这个示例实现了一个可拖动的 div,具体特点如下:
- 使用 Vue 2 实现拖动逻辑
- 通过
mousedown
、mousemove
和mouseup
事件控制拖动 - 添加了鼠标偏移计算,使得拖动更加自然
- 使用
:style
绑定 div 的位置 - 通过 CSS 设置
cursor: move
提示可拖动 - 添加
user-select: none
防止文字选中干扰拖动
主要实现步骤:
startDrag
方法:记录鼠标点击的初始位置和偏移onDrag
方法:实时更新 div 位置stopDrag
方法:结束拖动并移除事件监听
你可以直接在浏览器中打开这个 HTML 文件,就能看到可拖动的绿色 div。
需要注意的是,这是一个基础实现。对于更复杂的拖动需求,建议使用 Vue Draggable 等专业的拖动库。