Vue3+Element Plus:使用el-dialog,对话框可拖动,且对话框弹出时仍然能够在背景页(对话框外部的页面部分)上进行滚动以及输入框输入信息

【需求】

使用Element Plus中的el-dialog默认是模态的(即它会阻止用户与对话框外部的元素进行交互),对话框弹出时仍然能够在背景页(对话框外部的页面部分)上进行滚动以及输入框输入信息,且对话框可拖动

【思路】

  • 设置el-dialog属性draggable为true,开启可拖动功能
  • 设置el-dialog属性modal为false,关闭遮罩层样式
  • 设置el-dialog属性lock-scroll为false,在 Dialog 出现时将 body 解除滚动锁定
  • 设置el-dialog属性close-on-click-modal为false,不可以通过点击 modal 关闭 Dialog
  • 添加el-dialog属性modal-class,遮罩的自定义类名,设置为pointer-events: none
  • 添加el-dialog属性class,Dialog 的自定义类名,设置为pointer-events: auto

【示例代码】

typescript 复制代码
<template>
  <el-button plain @click="dialogVisible = true">
    打开弹出框
  </el-button>
  <ul>
  <li>6</li>
  <li>6</li>
  <li>6</li>
  <li>6</li>
  <li>6</li>
  <li>
    <el-input v-model="backgroundInput" placeholder="在背景页输入"></el-input>
  </li>
  <li>6</li>
  <li>6</li>
  <li>6</li>
  <li>6</li>
  <li>6</li>
  <li>6</li>
  <li>6</li>
  <li>6</li>
  <li>6</li>
  <li>6</li>
  <li>6</li>
  <li>6</li>
  <li>6</li>
  <li>6</li>
  <li>6</li>
  <li>6</li>
  <li>6</li>
  <li>6</li>
  <li>6</li>
  <li>6</li>
  <li>6</li>
  <li>6</li>
  </ul>

<div>
  <el-dialog
  v-model="dialogVisible"
  title="标题"
  width="500"
  draggable
  :modal="false"
  :lock-scroll="false"
  :close-on-click-modal="false"
  modal-class="modal-wrap"
  class="dialog-wrap"
  >
    <span>content区域</span>
    <template #footer>
      <div class="dialog-footer">
        <el-button @click="dialogVisible = false">取消</el-button>
        <el-button type="primary" @click="dialogVisible = false">
          确定
        </el-button>
      </div>
    </template>
  </el-dialog>
</div>
</template>

<script lang="ts" setup>
import { ref } from 'vue'

const dialogVisible = ref(false)
const backgroundInput = ref('')

</script>
<style scoped>
:deep(.modal-wrap) {
  pointer-events: none !important;
}
:deep(.dialog-wrap) {
  pointer-events: auto !important;
}
</style>

【效果】

【注意】

但请注意,尽管技术上可行,但在实际应用中一般不推荐将对话框设置为非模态,因为这可能会导致意外的交互。所以如果需要在对话框中收集用户输入,最好是在对话框内部添加相应的表单元素。

相关推荐
七号练习生.c4 分钟前
JavaScript基础入门
开发语言·javascript·ecmascript
一 乐7 分钟前
高校教务|教务管理|基于springboot+vue的高校教务管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·教务管理
zhousenshan9 分钟前
ES6 import语法
vue.js
码界筑梦坊9 分钟前
243-基于Django与VUE的笔记本电脑数据可视化分析系统
vue.js·python·信息可视化·数据分析·django·毕业设计·echarts
黄毛火烧雪下17 分钟前
React Native (RN)项目在web、Android和IOS上运行
android·前端·react native
fruge23 分钟前
前端正则表达式实战合集:表单验证与字符串处理高频场景
前端·正则表达式
baozj28 分钟前
🚀 手动改 500 个文件?不存在的!我用 AST 撸了个 Vue 国际化神器
前端·javascript·vue.js
用户40993225021236 分钟前
为什么Vue 3的计算属性能解决模板臃肿、性能优化和双向同步三大痛点?
前端·ai编程·trae
海云前端137 分钟前
Vue首屏加速秘籍 组件按需加载真能省一半时间
前端
蛋仔聊测试38 分钟前
Playwright 中route 方法模拟测试数据(Mocking)详解
前端·python·测试