el-dialog弹窗拖动

news/2024/10/22 18:47:31/
import Vue from 'vue'// v-dialogDrag: 弹窗拖拽属性 (重点!!! 给模态框添加这个属性模态框就能拖拽了)
Vue.directive('dialogDrag', {// 属性名称dialogDrag,前面加v- 使用bind(el, binding, vnode) {const dialogHeaderEl = el.querySelector('.el-dialog__header')const dragDom = el.querySelector('.el-dialog')dialogHeaderEl.style.cssText += ';cursor:move;'dragDom.style.cssText += ';top:0px;'// 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);const getStyle = (function () {if (window.document.currentStyle) {return (dom, attr) => dom.currentStyle[attr]} else {return (dom, attr) => getComputedStyle(dom, false)[attr]}})()dialogHeaderEl.onmousedown = e => {// 鼠标按下,计算当前元素距离可视区的距离const disX = e.clientX - dialogHeaderEl.offsetLeftconst disY = e.clientY - dialogHeaderEl.offsetTopconst dragDomWidth = dragDom.offsetWidth// const dragDomHeight = dragDom.offsetHeightconst screenWidth = document.body.clientWidthconst screenHeight = document.body.clientHeightconst minDragDomLeft = dragDom.offsetLeftconst maxDragDomLeft = screenWidth - dragDom.offsetLeft - dragDomWidthconst minDragDomTop = dragDom.offsetTop// const maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomHeightconst maxDragDomTop = screenHeight - dragDom.offsetTop // 不需要-dragDomHeight// 获取到的值带px 正则匹配替换let styL = getStyle(dragDom, 'left')let styT = getStyle(dragDom, 'top')if (styL.includes('%')) {styL = +document.body.clientWidth * (+styL.replace(/\%/g, '') / 100)styT = +document.body.clientHeight * (+styT.replace(/\%/g, '') / 100)} else {styL = +styL.replace(/\px/g, '')styT = +styT.replace(/\px/g, '')}document.onmousemove = function (e) {// 通过事件委托,计算移动的距离let left = e.clientX - disXlet top = e.clientY - disY// 边界处理if (-left > minDragDomLeft) {left = -minDragDomLeft} else if (left > maxDragDomLeft) {left = maxDragDomLeft}if (-top > minDragDomTop) {top = -minDragDomTop} else if (top > maxDragDomTop) {top = maxDragDomTop}// 移动当前元素dragDom.style.cssText += `;left:${left + styL}px;top:${top + styT}px;`// emit onDrag eventvnode.child.$emit('dragDialog')}document.onmouseup = function (e) {document.onmousemove = nulldocument.onmouseup = null}}}
})

http://www.ppmy.cn/news/1169170.html

相关文章

最小生成树笔记

生成树:删去一些边,使图变成树。 对于 n n n 个点的图,生成树有 n − 1 n-1 n−1 条边。 最小生成树:所有生成树中边权最小的。 对于一个图,不存在最大/最小生成树的条件是并查集里面没有 n n n 个点,…

AM@连续函数相关概念和运算性质

文章目录 abstract相关概念最值👺无最值的情况零点 连续函数的性质连续函数的四则运算复合函数极限关系定理函数符号和极限号交换次序 复合函数的连续性👺基本初等函数的连续性推论 反函数的连续性👺 abstract 连续函数相关概念和运算性质 …

类和对象介绍

一、类 1.类的声明 class Box{//类名private://私有成员double width,length,height;//长,宽,高 public://公有成员void init(double l,double w,double h){//初始化 lengthl;widthw;heighth;}double S(){//求表面积 return (height*lengthheight*width…

✔ ★【备战实习(面经+项目+算法)】 10.21学习时间表(总计学习时间:5h30min)(算法刷题:7道)

✔ ★【备战实习(面经项目算法)】 坚持完成每天必做如何找到好工作1. 科学的学习方法(专注!效率!记忆!心流!)2. 每天认真完成必做项,踏实学习技术 认真完成每天必做&…

Ubuntu安装git方法

Ubuntu安装git方法 1、更新软件包列表 sudo apt-get update目的:更新本地的软件源头,以便于从最新的软件源头下载最新的软件包 2、安装git sudo apt-get install gitubuntu会检查所需要的软件包及其依赖项,并自动下载安装他们。 3、验证Gi…

Android屏幕刷新机制

基础知识 CPU运行在Android设备上的中央处理器(Central Processing Unit)是Android设备的核心组件之一,负责执行计算和控制设备的各种操作。 Android设备上的CPU通常采用ARM架构,如ARM Cortex-A系列处理器。这些处理器具有高性能…

hutool 工具类

hutool 工具类 hutool 依赖 引入 hutool 依赖包。 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.6</version> </dependency>StrUtil 常用方法&#xff1a; StrUtil.equals&…

数据链路层、网络层以及IP协议

文章目录 一、IP协议报头1.1IP数据包拆包组包1.2网段划分1.3特殊的IP地址 二、网络层要完成的任务2.1地址管理2.1.1方案一&#xff1a;动态分配IP2.1.2方案二&#xff1a;NAT机制(网络地址转换机制&#xff0c;这是主流方案)2.1.3方案三&#xff1a;使用IPv6。 2.2路由选择(描述…