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>
<p>该代码示例展示了如何使用 Vue2 创建一个可拖拽的 Dialog 弹框。</p>
<p>我们创建了一个名为 'Dialog' 的 Vue 组件,该组件包含一个可拖拽的弹框。</p>
<p>通过使用 'mousedown'、'mousemove' 和 'mouseup' 事件,实现了拖拽功能。</p>
<p>当用户按下鼠标左键时,我们将 'dragging' 属性设置为 'true',并记录鼠标初始位置。</p>
<p>然后,在移动鼠标时,我们计算鼠标位置的变化,并更新弹框的位置。</p>
<p>最后,在松开鼠标时,我们将 'dragging' 属性设置为 'false',以停止拖拽操作。</p>
<p>我们还将弹框的位置、z-index 属性和样式绑定到 Vue 组件的数据属性上,以使其可响应式地更新。</p>
<p>在组件的模板中,我们使用了插槽来允许用户自定义弹框的标题和内容。</p>
<p>我们还为标题元素添加了 'mousedown' 事件监听器,以启动拖拽操作。</p>
<p>最后,我们还为组件添加了一些基本的 CSS 样式,以使其看起来更像一个弹框。</p>
原文地址: https://www.cveoy.top/t/topic/ozQm 著作权归作者所有。请勿转载和采集!