vue中的拖拽事件
2023-12-13 06:19:35
在Vue中实现拖拽事件的方法如下:
- 在需要拖拽的元素上绑定mousedown和mouseup事件,分别设置为dragStart和dragEnd函数。
<div class="box" @mousedown="dragStart" @mouseup="dragEnd"></div>
- 在dragStart函数中,设置元素的初始位置和鼠标按下时的坐标,并为document对象绑定mousemove事件,设置为dragging函数。
dragStart(event) {
// 获取元素初始位置和鼠标按下时的坐标
this.startX = event.clientX;
this.startY = event.clientY;
this.offsetX = event.currentTarget.offsetLeft;
this.offsetY = event.currentTarget.offsetTop;
// 绑定mousemove事件
document.addEventListener('mousemove', this.dragging);
}
- 在dragging函数中,计算鼠标移动了多少距离,并将元素的位置进行更新。
dragging(event) {
// 计算鼠标移动了多少距离
const deltaX = event.clientX - this.startX;
const deltaY = event.clientY - this.startY;
// 更新元素的位置
const newLeft = this.offsetX + deltaX;
const newTop = this.offsetY + deltaY;
event.currentTarget.style.left = newLeft + 'px';
event.currentTarget.style.top = newTop + 'px';
}
- 在dragEnd函数中,解除document对象的mousemove事件。
dragEnd() {
document.removeEventListener('mousemove', this.dragging);
}
完整的示例代码如下:
<template>
<div class="box" @mousedown="dragStart" @mouseup="dragEnd"></div>
</template>
<script>
export default {
data() {
return {
startX: 0,
startY: 0,
offsetX: 0,
offsetY: 0,
}
},
methods: {
dragStart(event) {
// 获取元素初始位置和鼠标按下时的坐标
this.startX = event.clientX;
this.startY = event.clientY;
this.offsetX = event.currentTarget.offsetLeft;
this.offsetY = event.currentTarget.offsetTop;
// 绑定mousemove事件
document.addEventListener('mousemove', this.dragging);
},
dragging(event) {
// 计算鼠标移动了多少距离
const deltaX = event.clientX - this.startX;
const deltaY = event.clientY - this.startY;
// 更新元素的位置
const newLeft = this.offsetX + deltaX;
const newTop = this.offsetY + deltaY;
event.currentTarget.style.left = newLeft + 'px';
event.currentTarget.style.top = newTop + 'px';
},
dragEnd() {
// 解除mousemove事件
document.removeEventListener('mousemove', this.dragging);
},
},
}
</script>
文章来源:https://blog.csdn.net/weixin_59525879/article/details/134900578
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!