可以尝试以下步骤实现基于ElementUI+Vue3框架的鼠标拖拽移动el-dialog窗口的功能:

  1. 在需要使用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>
  1. 在Vue3的setup函数中,使用ref定义dialogVisible变量,表示el-dialog的显示状态;使用beforeClose函数,当el-dialog关闭前触发的函数;使用draggableDialog函数,实现鼠标拖拽移动el-dialog窗口的功能。

  2. 在draggableDialog函数中,使用querySelector获取el-dialog__header和el-dialog元素,并使用addEventListener监听mousedown、mousemove和mouseup事件。当mousedown事件触发时,记录当前鼠标的坐标和drag状态;当mousemove事件触发时,计算鼠标的偏移量,并设置el-dialog的top和left样式属性;当mouseup事件触发时,将drag状态改为false。在onUnmounted函数中,移除监听的事件。

  3. 在el-dialog中,设置draggable属性为false,禁止el-dialog默认的拖拽移动功能。

  4. 注意在组件中引入ElementUI的样式文件,确保el-dialog的样式生效。

以上就是基于ElementUI+Vue3框架实现鼠标拖拽移动el-dialog窗口的方法。

我想实现一个基于ElementUI+Vue3框架的对el-dialog窗口实现鼠标拖拽移动的功能注意使用的是Vue3没有效果

原文地址: https://www.cveoy.top/t/topic/bJIE 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录