Vue2+ElementUI 弹窗全局拖拽 支持放大缩小

拖拽组件

dialogDrag.vue

<template><div></div>
</template>
<script>export default {name: 'dialogDrag',data() {return {originalWidth: null,originalHeight: null}},created() {this.$nextTick(()=>{this.dialogDrag()})},mounted() {},methods: {dialogDrag(){//获取弹窗DOMlet dragDom = this.$el.getElementsByClassName('el-dialog')[0]// this.originalWidth = dragDom.style.width// this.originalHeight = dragDom.style.height//弹窗标题顶部DOMlet dialogHeaderDom = this.$el.getElementsByClassName('el-dialog__header')[0]//设置拖动样式dialogHeaderDom.style.cursor = 'move'let mousedown = falseconst sty = dragDom.currentStyle || window.getComputedStyle(dragDom, null)//鼠标按下弹窗顶部dialogHeaderDom.onmousedown = (e) => {if(e.stopPropagation) e.stopPropagation();if(e.preventDefault) e.preventDefault();if (e.detail === 2) {if (this.originalWidth || this.originalHeight) {// 还原弹窗的宽度和高度dragDom.style.width = this.originalWidthdragDom.style.height = this.originalHeightthis.originalWidth = nullthis.originalHeight = null} else {// 保存当前弹窗的宽度和高度this.originalWidth = dragDom.style.widththis.originalHeight = dragDom.style.height// 设置弹窗宽度和高度为窗口的宽度和高度dragDom.style.width = '100vw'dragDom.style.height = window.innerHeight + 'px'dragDom.style.overflow= 'auto'}mousedown = falsedocument.onmousemove = nulldocument.onmouseup = null}mousedown = true // 鼠标距离弹框的距离//获取鼠标拖拽起始X位置const startLeft = e.clientX - dialogHeaderDom.offsetLeft//获取鼠标拖拽起始Y位置const startTop = e.clientY - dialogHeaderDom.offsetTop // 现在弹框的left,toplet styL, styTif (sty.left.includes('%')) {styL = +document.body.clientWidth * (+sty.left.replace('%', '') / 100)styT = +document.body.clientHeight * (+sty.top.replace('%', '') / 100)} else {styL = +sty.left.replace('px', '')styT = +sty.top.replace('px', '')}document.onmousemove = function(e) {if (!mousedown) {return false} // 鼠标移动的距离 + 弹框的left/toplet l = e.clientX - startLeft + styLlet t = e.clientY - startTop + styTconst offsetParent = dragDom.offsetParent || document.bodyconst maxL = offsetParent.clientWidth - dragDom.clientWidth//设置拖拽到底部最大高度4分之1const maxT = offsetParent.clientHeight - dragDom.clientHeight + (sty.height.toString().split('p') && Number(sty.height.toString().split('p')[0])/1.5)if (maxL < l) {l = maxL} else if (l < 0 && l * -1 > startLeft) {// 向左偏移的距离 l = -startLeft;}if (t < 0) {t = 0} else if (maxT < t) {t = maxT}dragDom.style.left = `${l}px`dragDom.style.top = `${t}px`}// document.onmouseup = function(e) {//   mousedown = false//   document.onmousemove = null//   document.onmouseup = null// }document.body.addEventListener('mouseup', () => {// mouseup 需要执行的代码块mousedown = falsedocument.onmousemove = nulldocument.onmouseup = null})}}}}
</script><style scoped></style>

index.js

import dialogDragMixin from './dialogDrag'export function installElement(Vue, Element) {Element.Dialog.mixins.push(dialogDragMixin);}

main.js

import { installElement } from '@/config/element';
installElement(Vue, Element);

创建目录

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win wsl2 Ubuntu-22.04 设置时间为国内时间

使用 wsl2 安装 Ubuntu-22.04 后 时间不正确&#xff0c;主要有两个原因 时区设置不正确&#xff0c;国内为京八区。 时区正确后&#xff0c;没有同步时间。&#xff08;大部分人容易忽略这一点&#xff09; Linux 默认情况下使用 UTC 格式作为标准时间格式&#xff0c;如果在…

Go语言的100个错误使用场景(11-20)|项目组织和数据类型

前言 大家好&#xff0c;这里是白泽。 《Go语言的100个错误以及如何避免》 是最近朋友推荐我阅读的书籍&#xff0c;我初步浏览之后&#xff0c;大为惊喜。就像这书中第一章的标题说到的&#xff1a;“Go: Simple to learn but hard to master”&#xff0c;整本书通过分析100…

嵌入式系统学习(一)

嵌入式现状&#xff08;UP经历&#xff09;&#xff1a; 大厂的招聘要求&#xff1a; 技术栈总结&#xff1a; 产品拆解网站&#xff1a; 52audio 方案查询网站iotku,我爱方案网&#xff0c; 主要元器件类型&#xff1a;

冰冻天气恰逢春运,“观冰精灵”化身电力供应守护者

据中国路网&#xff0c;截至2月1日14时&#xff0c;受降雪及路面结冰影响&#xff0c;河北、山西、内蒙古、黑龙江、江苏、安徽、河南、山东、西藏、陕西、宁夏、甘肃、新疆共封闭路段66个&#xff08;涉及44条高速公路、5条普通国道、5条普通省道&#xff09;&#xff0c;关闭…

C语言问题汇总

指针 #include <stdio.h>int main(void){int a[4] {1,2,3,4};int *p &a1;int *p1 a1;printf("%#x,%#x",p[-1],*p1);} 以上代码中存在错误。 int *p &a1; 错误1&#xff1a;取a数组的地址&#xff0c;然后1&#xff0c;即指针跳过int [4]大小的字节…

数据图表方案,企业视频生产数据可视化

在信息爆炸的时代&#xff0c;如何将复杂的数据转化为直观、生动的视觉信息&#xff0c;是企业在数字化转型中面临的挑战。美摄科技凭借其独特的数据图表方案&#xff0c;为企业在数据可视化领域打开了一扇全新的大门。 一、数据图表方案的优势 1、高效便捷&#xff1a;利用数…

计算机网络第4章(网络层)

4.1、网络层概述 简介 网络层的主要任务是实现网络互连&#xff0c;进而实现数据包在各网络之间的传输 这些异构型网络N1~N7如果只是需要各自内部通信&#xff0c;他们只要实现各自的物理层和数据链路层即可 但是如果要将这些异构型网络互连起来&#xff0c;形成一个更大的互…

【七】【C++】模版初阶

泛型编程 C中的泛型编程是一种编程范式&#xff0c;它强调代码的重用性和类型独立性。通过泛型编程&#xff0c;你可以编写与特定数据类型无关的代码&#xff0c;使得相同的代码可以用于多种数据类型。 利用重载实现泛型编程 /*利用重载实现泛型编程*/ #include<iostream&…

部署实战--修改jar中的文件并重新打包成jar文件

一.jar文件 JAR 文件就是 Java Archive &#xff08; Java 档案文件&#xff09;&#xff0c;它是 Java 的一种文档格式JAR 文件与 ZIP 文件唯一的区别就是在 JAR 文件的内容中&#xff0c;多出了一个META-INF/MANIFEST.MF 文件META-INF/MANIFEST.MF 文件在生成 JAR 文件的时候…

STM32--USART串口(3)数据包

一、前言 在实际的工程中肯会有同时发送多种数据的情况&#xff0c;比如要不停的发送x、y、z分别对应三种不同的数据。xyzxyzxyz&#xff0c;但接收方可能是从中间某个地方开始接收的&#xff0c;这就导致数据错位。所以我们就需要将数据进行分割&#xff0c;打包成一个一个的…

spring问题点

1.事务 1.1.事务传播 同一个类中 事务A调非事务B B抛异常 AB事务生效&#xff08;具有传播性&#xff09; 同一个类中 事务A调非事务B A抛异常 AB事务生效 也就是主方法加了事务注解 则方法内调用的其他本类方法无需加事务注解&#xff0c; 发生异常时可以保证事务的回滚 最常…

LabVIEW核能设施监测

LabVIEW核能设施监测 在核能领域&#xff0c;确保设施运行的安全性和效率至关重要。LabVIEW通过与硬件的紧密集成&#xff0c;为高温气冷堆燃料装卸计数系统以及脉冲堆辐射剂量监测与数据管理系统提供了解决方案。这些系统不仅提高了监测和管理的精确度&#xff0c;也保证了核…