vue2怎样实现dialog弹框可拖拽代码怎么写
以下是使用Vue2实现可拖拽的Dialog弹框的示例代码:
<template>
<div class="dialog" :style="{top: top + 'px', left: left + 'px', zIndex: zIndex}">
<div class="dialog-title" @mousedown="handleMouseDown">
<slot name="title"></slot>
</div>
<div class="dialog-content">
<slot></slot>
</div>
</div>
</template>
<script>
export default {
data() {
return {
dragging: false,
top: 0,
left: 0,
startX: 0,
startY: 0,
zIndex: 1000
}
},
methods: {
handleMouseDown(event) {
this.dragging = true
this.startX = event.clientX
this.startY = event.clientY
},
handleMouseMove(event) {
if (this.dragging) {
const deltaX = event.clientX - this.startX
const deltaY = event.clientY - this.startY
this.left += deltaX
this.top += deltaY
this.startX = event.clientX
this.startY = event.clientY
}
},
handleMouseUp() {
this.dragging = false
}
},
mounted() {
document.addEventListener('mousemove', this.handleMouseMove)
document.addEventListener('mouseup', this.handleMouseUp)
},
beforeDestroy() {
document.removeEventListener('mousemove', this.handleMouseMove)
document.removeEventListener('mouseup', this.handleMouseUp)
}
}
</script>
<style scoped>
.dialog {
position: absolute;
width: 400px;
background-color: #fff;
border: 1px solid #ddd;
}
.dialog-title {
padding: 10px;
cursor: move;
background-color: #f5f5f5;
}
.dialog-content {
padding: 20px;
}
</style>
在上述代码中,我们创建了一个名为Dialog的Vue组件,该组件包含一个可拖拽的弹框。我们使用了mousedown、mousemove和mouseup事件来实现拖拽功能。当用户按下鼠标左键时,我们将dragging属性设置为true,并记录鼠标初始位置。然后,在移动鼠标时,我们计算鼠标位置的变化,并更新弹框的位置。最后,在松开鼠标时,我们将dragging属性设置为false,以停止拖拽操作。
我们还将弹框的位置、z-index属性和样式绑定到Vue组件的数据属性上,以使其可响应式地更新。
在组件的模板中,我们使用了插槽来允许用户自定义弹框的标题和内容。我们还为标题元素添加了mousedown事件监听器,以启动拖拽操作。
最后,我们还为组件添加了一些基本的CSS样式,以使其看起来更像一个弹框
原文地址: http://www.cveoy.top/t/topic/g1lG 著作权归作者所有。请勿转载和采集!