el-dialog支持全局拖拽功能

ops/2024/11/1 7:36:54/

1.首先在全局的组件实现拖拽功能,结构如下
在这里插入图片描述
dialogDrag.vue的内容

javascript"><script>export default {mounted() {// 获取当前的dialog及其headerlet aimDialog = this.$el.getElementsByClassName('el-dialog')[0];let aimHeader = this.$el.getElementsByClassName('el-dialog__header')[0];// 获取总的dialog_warpper列表let wrapperList = document.getElementsByClassName('el-dialog__wrapper');aimHeader.onmousedown = (e) => {// 用于存放当前dialog所对应的dialog_warpperlet aimWrap = "";for(let i=0; i<wrapperList.length; i++) {if(wrapperList[i].childNodes[0] == aimDialog) {aimWrap = wrapperList[i]}}// 存放dialog最终的left与top值let currentLeft = "";let currentTop = "";// 通过鼠标点击位置与起始offset位置,获取起始点击x,ylet x1 = e.clientX - aimWrap.offsetLeft;let y1 = e.clientY - aimWrap.offsetTop;document.onmousemove = (e) => {// 清除选中状态let selection = window.getSelection();selection.removeAllRanges();// 获取移动后的x,ycurrentLeft = e.clientX - x1;currentTop = e.clientY - y1;aimWrap.style.left = currentLeft + 'px';aimWrap.style.top = currentTop + 'px';}document.onmouseup = () => {let dialogLeft = aimDialog.offsetLeft;  // dialog距离dialog_wrap左侧距离let dialogTop = aimDialog.offsetTop;  // dialog距离dialog_wrap左侧距离// 当超出20px距离时回弹20px// 左侧超出if(currentLeft + dialogLeft + aimDialog.clientWidth < 20) {currentLeft = 20 - aimDialog.clientWidth - dialogLeft}// 顶部超出if(currentTop + dialogTop < 20) {currentTop = 20 - dialogTop}// 右侧超出if(currentLeft + dialogLeft > aimWrap.clientWidth - 20) {currentLeft = dialogLeft + aimDialog.clientWidth - 20}// 底部超出if(currentTop + dialogTop > aimWrap.clientHeight - 20) {currentTop =  aimWrap.clientHeight - dialogTop - 20}aimWrap.style.left = currentLeft + 'px';aimWrap.style.top = currentTop + 'px';document.onmousemove = null;document.onmouseup = null;}}}}
</script>
<style>.el-dialog__header {/* header颜色,下面是示例,可以忽略 *//* background-color: aqua; */}.el-dialog__wrapper {width: 100vw;height: 100vh;}
</style>

index.js文件

javascript">import dialogDragMixin from './dialogDrag'  
export function installDialog(Vue, Element) {Element.Dialog.methods.handleClose = function(){if(typeof this.beforeClose==='function'){this.beforeClose(this.hide);}else{this.hide();}// 关闭后重置dialog_warpper的position相关let aimDialog = this.$el.getElementsByClassName('el-dialog')[0];let wrapperList = document.getElementsByClassName('el-dialog__wrapper');let aimWrap = "";for(let i=0; i<wrapperList.length; i++) {if(wrapperList[i].childNodes[0] == aimDialog) {aimWrap = wrapperList[i]}}window.setTimeout(() => {if(aimWrap){aimWrap.style.left = 0;aimWrap.style.top = 0;}}, 500)}Element.Dialog.mixins.push(dialogDragMixin);  
}

在main.js里全局注册

javascript">import { installDialog } from "../src/components/common/dialog/index.js";installDialog(Vue, ElementUI)

http://www.ppmy.cn/ops/130076.html

相关文章

游戏-夺命左轮(Python)

简介 最近B站给我推的骗子酒馆有点多&#xff0c;居然还有真人版&#xff0c;于是&#xff01;&#x1f913;&#x1f446;&#x1f3fc; 代码 # -*- coding: utf-8 -*- # Environment PyCharm # File_name player |User Pfolg # 2024/10/28 19:17 import ctypes im…

Java | Leetcode Java题解之第524题通过删除字母匹配到字典里最长单词

题目&#xff1a; 题解&#xff1a; class Solution {public String findLongestWord(String s, List<String> dictionary) {int m s.length();int[][] f new int[m 1][26];Arrays.fill(f[m], m);for (int i m - 1; i > 0; --i) {for (int j 0; j < 26; j) {…

HTML入门教程18:HTML类

一、定义类 在HTML中&#xff0c;你使用class属性来为元素分配类名。类名可以是任何你选择的名称&#xff0c;但最好使用能够描述元素用途或样式的名称。类名前面用一个点&#xff08;.&#xff09;表示&#xff0c;但在HTML中给元素分配类名时不需要这个点。 <div class&…

【力扣专题栏】重排链表,如何实现链表里面节点之间的交换?

题解目录 1、题目描述解释2、算法原理解析3、代码编写 1、题目描述解释 主要就是实现&#xff1a;第一个节点和最后一个节点交换&#xff0c;第二节点和倒数第二个节点交换&#xff0c;依次交换下去。 2、算法原理解析 3、代码编写 class Solution { public:void reorderList(…

sqlserver、达梦、mysql调用存储过程(带输入输出参数)

1、sqlserver&#xff0c;可以省略输出参数 --sqlserver调用存储过程&#xff0c;有输入参数&#xff0c;有输出参数--省略输出参数 exec proc_GetReportPrintData 1, , , 1--输出参数为 null exec proc_GetReportPrintData 1, , , 1, null--固定输出参数 exec proc_GetReport…

高效租房流程管理:Spring Boot租房系统解析

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

无人机多机编队控制算法详解!

一、主要算法类型 长机-僚机法&#xff08;Leader-Follower&#xff09; 原理&#xff1a;通过设定一架无人机作为长机&#xff08;领航者&#xff09;&#xff0c;其他无人机作为僚机&#xff08;跟随者&#xff09;&#xff0c;僚机根据长机的信息来调整自身的飞行状态&#…

HTML5和CSS3常见面试题

&#x1f60a;HTML5和CSS3常见面试题 1.HTML5有哪些新特性&#xff1f;2.你是如何理解语义化标签的&#xff1f;3.CSS3有哪些新特性&#xff1f;4.rem和em的区别是什么&#xff1f;5.如何实现自适应布局&#xff1f;6.清除浮动的方法有哪些&#xff1f;7.伪元素清除的原理是什么…