我想实现一个基于ElementUI+Vue3框架的对el-dialog窗口实现鼠标拖拽移动的功能注意使用的是Vue3没有效果
可以尝试以下步骤实现基于ElementUI+Vue3框架的鼠标拖拽移动el-dialog窗口的功能:
- 在需要使用el-dialog的组件中,引入ElementUI的样式文件和Vue3的ref、onMounted、onUnmounted等hook函数。
<template>
<div>
<el-dialog
title="Dialog Title"
:visible.sync="dialogVisible"
:before-close="beforeClose"
:draggable="false"
>
<span>Dialog Content</span>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">Cancel</el-button>
<el-button type="primary" @click="dialogVisible = false">Confirm</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import 'element-ui/lib/theme-chalk/index.css'
import { ref, onMounted, onUnmounted } from 'vue'
export default {
setup() {
const dialogVisible = ref(false)
const beforeClose = (done) => {
dialogVisible.value = false
done()
}
const draggableDialog = () => {
const dialogHeaderEl = document.querySelector('.el-dialog__header')
const dialogEl = document.querySelector('.el-dialog')
let drag = false
let startX = 0
let startY = 0
let offsetX = 0
let offsetY = 0
const handleMouseDown = (e) => {
startX = e.clientX
startY = e.clientY
drag = true
}
const handleMouseMove = (e) => {
if (drag) {
offsetX = e.clientX - startX
offsetY = e.clientY - startY
dialogEl.style.top = `${dialogEl.offsetTop + offsetY}px`
dialogEl.style.left = `${dialogEl.offsetLeft + offsetX}px`
startX = e.clientX
startY = e.clientY
}
}
const handleMouseUp = () => {
drag = false
}
dialogHeaderEl.addEventListener('mousedown', handleMouseDown)
document.addEventListener('mousemove', handleMouseMove)
document.addEventListener('mouseup', handleMouseUp)
onUnmounted(() => {
dialogHeaderEl.removeEventListener('mousedown', handleMouseDown)
document.removeEventListener('mousemove', handleMouseMove)
document.removeEventListener('mouseup', handleMouseUp)
})
}
onMounted(() => {
draggableDialog()
})
return {
dialogVisible,
beforeClose
}
}
}
</script>
-
在Vue3的setup函数中,使用ref定义dialogVisible变量,表示el-dialog的显示状态;使用beforeClose函数,当el-dialog关闭前触发的函数;使用draggableDialog函数,实现鼠标拖拽移动el-dialog窗口的功能。
-
在draggableDialog函数中,使用querySelector获取el-dialog__header和el-dialog元素,并使用addEventListener监听mousedown、mousemove和mouseup事件。当mousedown事件触发时,记录当前鼠标的坐标和drag状态;当mousemove事件触发时,计算鼠标的偏移量,并设置el-dialog的top和left样式属性;当mouseup事件触发时,将drag状态改为false。在onUnmounted函数中,移除监听的事件。
-
在el-dialog中,设置draggable属性为false,禁止el-dialog默认的拖拽移动功能。
-
注意在组件中引入ElementUI的样式文件,确保el-dialog的样式生效。
以上就是基于ElementUI+Vue3框架实现鼠标拖拽移动el-dialog窗口的方法。
原文地址: https://www.cveoy.top/t/topic/bJIE 著作权归作者所有。请勿转载和采集!