gpt4 book ai didi

javascript - 拖动div内的元素但拖动时该元素会闪烁

转载 作者:行者123 更新时间:2023-12-02 21:05:26 26 4
gpt4 key购买 nike

我试图在另一个 div 内拖动一个元素,但在拖动时它不断闪烁。我用这个沙箱重新创建了问题https://codesandbox.io/s/focused-cache-l3yos

<template>
<div id="app">
<div id="board" @mousemove="dragOver">
<div
class="draggableItem"
@mousedown="dragStart"
@mouseup="dragStop"
:style="{top: this.top + 'px', left: this.left + 'px'}"
>This should be draggable</div>
</div>
</div>
</template>

<script>
export default {
name: "App",
data: function() {
return {
isDragging: false,
top: 50,
left: 50
};
},
methods: {
dragOver: function(e) {
if (this.isDragging) {
this.left = e.offsetX;
this.top = e.offsetY;
}
},
dragStart: function(e) {
this.isDragging = true;
},
dragStop: function(e) {
this.isDragging = false;
}
}
};
</script>

最佳答案

您可以将位置计算为距起始位置的偏移量,然后根据移动进行更新。这将允许绘制任何部分。您可以(并且应该恕我直言)动态附加和删除事件处理程序。

这可能是这样的:

<template>
<div id="app">
<div id="board">
<div
class="draggableItem"
@mousedown="dragStart"
:style="{top: this.top + 'px', left: this.left + 'px'}"
>This should be draggable</div>
</div>
</div>
</template>

<script>
export default {
name: "App",
data: function() {
return {
isDragging: false,
top: 50,
left: 50,
startTop: 0,
startLeft: 0
};
},
methods: {
dragOver: function(e) {
if (this.isDragging) {
this.top = e.clientY - this.startTop;
this.left = e.clientX - this.startLeft;
}
},
dragStart: function(e) {
window.addEventListener('mousemove', this.dragOver)
window.addEventListener('mouseup', this.dragStop)
this.isDragging = true;
this.startTop = e.clientY - this.top;
this.startLeft = e.clientX - this.left;
},
dragStop: function(e) {
window.removeEventListener('mousemove', this.dragOver)
window.removeEventListener('mouseup', this.dragStop)
this.isDragging = false;
}
}
};
</script>

关于javascript - 拖动div内的元素但拖动时该元素会闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61237438/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com