实现dialog在页面随意拖拽

news2024/11/26 17:32:02

实现dialog在页面随意拖拽

1.先建一个文件如图所示:

在这里插入图片描述
文件名:dialog-directive.js
文件内容:

import Vue from 'vue'
// v-dialogDrag: 弹窗拖拽
 Vue.directive('dialogDrag', {
  bind(el, binding, vnode, oldVnode) {
  // 获取拖拽内容的头部
  const dialogHeaderEl = el.querySelector('.el-dialog__header')
  // 获取拖拽整体
  const dragDom = el.querySelector('.el-dialog') || el.querySelector('.ele-form-dialog')//( rrc-dialog是我自己封装的组件 如果使用element组件应写成.el-dialog)
  dialogHeaderEl.style.cursor = 'move'
// 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);
  const sty = dragDom.currentStyle || window.getComputedStyle(dragDom, null)
  // const sty = window.getComputedStyle(dragDom, null)
  // 鼠标按下事件
  dialogHeaderEl.onmousedown = (e) => {
  // 鼠标按下,计算当前元素距离可视区的距离 (鼠标点击位置距离可视窗口的距离)
    const disX = e.clientX - dialogHeaderEl.offsetLeft
    const disY = e.clientY - dialogHeaderEl.offsetTop
    // 获取到的值带px 正则匹配替换
    let styL, styT
    // 在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px
    if (sty.left.includes('%')) {
     styL = +document.body.clientWidth * (+sty.left.replace(/\%/g, '') / 100)
     styT = +document.body.clientHeight * (+sty.top.replace(/\%/g, '') / 100)
    } else {
     styL = +sty.left.replace(/\px/g, '')
     styT = +sty.top.replace(/\px/g, '')
    }
    // 鼠标拖拽事件
    document.onmousemove = function(e) {
      // 通过事件委托,计算移动的距离 (开始拖拽至结束拖拽的距离)
      const l = e.clientX - disX // 计算出从左往右边拖动了多少
      const t = e.clientY - disY // 计算出从上往下拖动了多少
      let finallyL = l + styL
       let finallyT = t + styT
      // 边界值判定 注意clientWidth scrollWidth区别 要减去之前的top left值
        // dragDom.offsetParent表示弹窗阴影部分
      if (finallyL < 0) {
        finallyL = l + styL
      } else if (finallyL > dragDom.offsetParent.clientWidth - dragDom.clientWidth - dragDom.offsetParent.offsetLeft) {
        finallyL = dragDom.offsetParent.clientWidth - dragDom.clientWidth - dragDom.offsetParent.offsetLeft
      }
      if (finallyT < 0) {
        finallyT = t + styT
       } else if (finallyT > dragDom.offsetParent.clientHeight - dragDom.clientHeight - dragDom.offsetParent.offsetLeft) {
        (finallyT = dragDom.offsetParent.clientHeight - dragDom.clientHeight - dragDom.offsetParent.offsetLeft)
       }
       // 移动当前元素
       dragDom.style.left = `${finallyL}px`
       dragDom.style.top = `${finallyT}px`
     }
     document.onmouseup = function(e) {
      document.onmousemove = null
      document.onmouseup = null
      }
    }
   }
  })
        

2.在main.js中引入

import '@/util/dialog-directive'

3.在dialog组件中使用v-dialogDrag

<el-dialog title="派工受阻" :visible.sync="dispatchStopDialog" width="40%" :show-close="false" v-dialogDrag>
  <el-form :model="forms" ref="forms" :rules="formRules">
    <el-form-item label="受阻原因" label-width="120px" prop="failReason" >
      <el-select v-model="forms.failReason" style="width: 68%" placeholder="受阻原因" size="small" @change="$forceUpdate();blockedReasoncheck()">
        <el-option v-for="item in dispatchReasonList" :key="item.key" :label="item.value" :value="item.key" ></el-option>
       </el-select>
     </el-form-item>
   </el-form>
   <div slot="footer" class="dialog-footer">
      <el-button type="info" @click="dispatchStopOff">取 消</el-button>
      <el-button type="primary" @click="isOk(forms)">确 定</el-button>
    </div>
</el-dialog>

就可以实现dialog在页面随意拖拽。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1167157.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中国联通携手华为助力长城精工启动商用5G-A柔性产线

[中国&#xff0c;河北&#xff0c;2023年11月3日] 近日&#xff0c;中国联通携手华为助力精诚工科汽车系统有限公司保定自动化技术分公司&#xff08;简称长城精工自动化&#xff09;启动5G-A超高可靠性超低时延柔性产线的商用阶段。 在河北保定精工自动化工厂&#xff0c;5G…

java入门,java数据结构二叉树结构

一、前言 树结构是计算机各种存储和查询算法的基本结构。但是在学习这个数据结构的时候&#xff0c;很少人知道它有什么运用&#xff0c;因为在学的时候&#xff0c;也是纯数学的讲解。博主当时学的时候也是云里雾里&#xff0c;最经典的就是严蔚敏和吴伟民的那本《C语言数据结…

python自动化运维——模拟键盘鼠标重复性操作Pyautoui

一、程序样式展示 将程序与cmd.xls文件放在同一文件夹&#xff0c;每一步的截图也放在当前文件夹 通过图片在屏幕上面进行比对&#xff0c;找到点击处进行自动化操作 自动化rpa测试 二、核心点 1.Pyautoui模块&#xff1a;主要针对图片进行定位pyautogui.locateCenterOnScree…

重新理解数字化采购:一场企业内的数字化战役

在显性的采购商品成本之外&#xff0c;越来越多企业开始发现采购环节里高昂的供应链隐性成本&#xff0c;这些成本几乎分布在链条和经营的每个节点&#xff1a;供应商管理、物流履约&#xff0c;售前、售后以及最前端的系统对接搭建等等。 换言之&#xff0c;若想做好数字化采…

智能电表瞬时电量是什么意思?

智能电表已经成为我们进行能源管理的重要工具。其中&#xff0c;瞬时电量这一概念逐渐走进大众视野。那么&#xff0c;智能电表瞬时电量究竟是什么意思&#xff1f;它对我们的生活和能源管理又有哪些影响呢&#xff1f;下面&#xff0c;小编就来为大家介绍一下瞬时电量&#xf…

linux上重启mysql

1、先关闭 [rootHIS bin]# ./mysqladmin -h 127.0.0.1 -u root -p shutdown 2、 再重启 [rootHIS support-files]# ./mysql.server start

eclipse报错 an error has occurred.see the log file

eclipse报错: an error has occurred.see the log file 问题描述 eclipse安装好之后用的好好的,结果第二天再打开的时候突然就起不来了,然后就开始报错 原因分析&#xff1a; 刚安装上那会因为是jdk1.8的环境运行我的项目报错,后来换成高版本的jdk换成了11,用的好好的就这样…

企业提高客服服务质量,可以从哪几个方面着手?

随着市场竞争的日益激烈&#xff0c;企业提高客服服务质量成为了企业发展的重要方向。一个良好的客服服务体系可以提升企业的竞争力&#xff0c;增强企业的品牌影响力。那么企业要如何提高客服服务质量呢&#xff1f;本文将从多个方面入手&#xff0c;帮助企业提高客服服务质量…

双向可视对讲终端机居家养老家用视频对讲

双向可视对讲终端机&#xff0c;用于平安校园&#xff0c;智慧城市、银行、医院&#xff0c;智慧养老&#xff0c;平安校园&#xff0c;无人超市等方案中的可视对讲报警设备。语音识别报警、一键报警、双向视频对讲、录音、电子地图显示、广播喊话等具有多功能产品。是守护平安…

JWT

目录 JWT组成 第一部分header 第二部分payload 第三部分signature 注意 JWT认证算法&#xff1a;签发和校验 drf使用jwt drf项目的jwt认证开发流程 drf-jwt安装和简单使用 安装 简单使用 drf-jwt使用 jwt内置类JSONWebTokenAuthentication 控制使用jwt的登录接口…

Sui zkSend,创建链接可直接发送SUI,快来体验吧

基于zkLogin和Sui的本机密码学构建&#xff0c;zkSend允许用户创建包含特定数量SUI的链接。该链接可以通过任何消息客户端发送&#xff0c;例如电子邮件和直接消息&#xff0c;甚至可以在媒体上转换成QR码。 使用zkSend发送SUI比复制和粘贴钱包地址&#xff0c;然后授权token转…

电脑技巧:WmiPrvSE.exe是什么进程?WMI Provider Host占用很高CPU的原因及解决办法

目录 一、WmiPrvSE.exe是什么进程&#xff1f; 二、WMI Provider Host简介 三、WMI Provider Host为什么占用很高CPU&#xff1f; 四、WMI Provider Host是否可禁用&#xff1f; 一、WmiPrvSE.exe是什么进程&#xff1f; WMI Provider Host &#xff08;WmiPrvSE.exe&#…

RT-Thread系统使用常见问题处理记录

1.使用telnet连接系统时发送help指令显示不全的问题。 原因&#xff1a;telnet发送缓存太小。 解决办法&#xff1a;更改agile_telnet软件包里Set agile_telnet tx buffer size的大小。 2.使用Paho MQTT软件包过一段时间报错hard fault on thread: mqtt0 解决办法&#xff1…

ElementuiPlus的table组件实现行拖动与列拖动

借助了插件sortablejs。这种方法只适合做非树状table。如果想实现树状table&#xff0c;并且可拖动。可以试一下aggridVue3这个插件 <template><div class"draggable" style"padding: 20px"><el-table row-key"id" :data"t…

linux——网络套接字编程

目录 一.简单了解TCP和UDP协议 二.网络字节序 三.socket常见的编程接口 1.介绍接口 2.sockaddr结构 四.简单的UDP网络程序 1.recvfrom和sendto 2.server.cc 3.client.cc 五.简单的TCP通信 1.client.cc 2.server.cc 一.简单了解TCP和UDP协议 此处我们先对TCP(Transm…

Unity在Project右键点击物体之后获取到点击物体的名称

Unity在Project右键点击物体之后获取到点击物体的名称 描述&#xff1a; 在Unity的Project右键点击物体之后选择对应的菜单选项点击之后打印出物体的名称 注意事项 如果获取到文件或者预制体需要传递objcet类型&#xff0c;然后使用 GameObject.Instantiate((GameObject)se…

人工智能-深度学习计算:层和块

我们关注的是具有单一输出的线性模型。 在这里&#xff0c;整个模型只有一个输出。 注意&#xff0c;单个神经网络 &#xff08;1&#xff09;接受一些输入&#xff1b; &#xff08;2&#xff09;生成相应的标量输出&#xff1b; &#xff08;3&#xff09;具有一组相关 参数…

BUUCTF RSA4

BUUCTF RSA4 下载题目&#xff0c;可见文件给出了3组n和c N 331310324212000030020214312244232222400142410423413104441140203003243002104333214202031202212403400220031202142322434104143104244241214204444443323000244130122022422310201104411044030113302323014101…

基于仿真的飞机ICD工具测试

机载电子系统是飞机完成飞行任务的核心保障之一。从1949年新中国建立至今70余年的发展过程中&#xff0c;随着我国在航空航天领域的投资逐年增多&#xff0c;机载电子系统大致经历了四个发展过程阶段&#xff0c;按照出现的先后顺序进行排序&#xff0c;分别为&#xff1a; 1、…

MyBatis实现多表映射、分页显示、逆向工程

目录 一、MyBatis实现多表映射 1.1 实体类设计 1.2 一对一关系实现案例 1.3 对多配置实现案例 1.4 设置自动映射与n张表关联映射 二、MyBatis实现分页功能 2.1 mybatis插件工作原理 2.2 引入插件与插件的使用 三、逆向工程插件 3.1 什么是逆向工程 3.2 MyBat…