解决饿了么ui的对话框缩放和移动
import Vue from "vue";// v-dialogDrag: 弹窗拖拽+水平方向伸缩
/** 使用方法* 将以下代码复制到一个js文件中,然后在入口文件main.js中import引入即可;* 给elementUI的dialog上加上 v-dialogDrag 指令就可以实现弹窗的全屏和拉伸了。* 给dialog设置 :close-on-click-modal="false" , 禁止点击遮罩层关闭弹出层* 如果是form表单,不要将提交等按钮放置el-form-item,以免在上下拉伸时被隐藏*/
Vue.directive('dialogDrag', {bind(el, binding, vnode, oldVnode) {//弹框可拉伸最小宽高let minWidth = 400;let minHeight = 300;//初始非全屏let isFullScreen = false;//当前宽高let nowWidth = 0;let nowHight = 0;//当前顶部高度let nowMarginTop = 0;//获取弹框头部(这部分可双击全屏)const dialogHeaderEl = el.querySelector('.el-dialog__header');//弹窗const dragDom = el.querySelector('.el-dialog');//给弹窗加上overflow auto;不然缩小时框内的标签可能超出dialog;dragDom.style.overflow = "auto";//清除选择头部文字效果//dialogHeaderEl.onselectstart = new Function("return false");//头部加上可拖动cursordialogHeaderEl.style.cursor = 'move';// 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);const sty = dragDom.currentStyle || window.getComputedStyle(dragDom, null);let moveDown = (e) => {// 鼠标按下,计算当前元素距离可视区的距离const disX = e.clientX - dialogHeaderEl.offsetLeft;const disY = e.clientY - dialogHeaderEl.offsetTop;// 获取到的值带px 正则匹配替换let styL, styT;// 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为pxif (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;// 移动当前元素 dragDom.style.left = `${l + styL}px`;dragDom.style.top = `${t + styT}px`;//将此时的位置传出去//binding.value({x:e.pageX,y:e.pageY})};document.onmouseup = function (e) {document.onmousemove = null;document.onmouseup = null;};}dialogHeaderEl.onmousedown = moveDown;//双击头部全屏效果dialogHeaderEl.ondblclick = (e) => {if (isFullScreen == false) {nowHight = dragDom.clientHeight;nowWidth = dragDom.clientWidth;nowMarginTop = dragDom.style.marginTop;dragDom.style.left = 0;dragDom.style.top = 0;dragDom.style.height = "100VH";dragDom.style.width = "100VW";dragDom.style.marginTop = 0;isFullScreen = true;dialogHeaderEl.style.cursor = 'initial';dialogHeaderEl.onmousedown = null;} else {dragDom.style.height = "auto";dragDom.style.width = nowWidth + 'px';dragDom.style.marginTop = nowMarginTop;isFullScreen = false;dialogHeaderEl.style.cursor = 'move';dialogHeaderEl.onmousedown = moveDown;}}dragDom.onmousemove = function (e) {let moveE = e;if (e.clientX > dragDom.offsetLeft + dragDom.clientWidth - 10 || dragDom.offsetLeft + 10 > e.clientX) {dragDom.style.cursor = 'w-resize';} else if (el.scrollTop + e.clientY > dragDom.offsetTop + dragDom.clientHeight - 10) {dragDom.style.cursor = 's-resize';} else {dragDom.style.cursor = 'default';dragDom.onmousedown = null;}dragDom.onmousedown = (e) => {const clientX = e.clientX;const clientY = e.clientY;let elW = dragDom.clientWidth;let elH = dragDom.clientHeight;let EloffsetLeft = dragDom.offsetLeft;let EloffsetTop = dragDom.offsetTop;dragDom.style.userSelect = 'none';let ELscrollTop = el.scrollTop;//判断点击的位置是不是为头部if (clientX > EloffsetLeft && clientX < EloffsetLeft + elW && clientY > EloffsetTop && clientY < EloffsetTop + 100) {//如果是头部在此就不做任何动作,以上有绑定dialogHeaderEl.onmousedown = moveDown;} else {document.onmousemove = function (e) {e.preventDefault(); // 移动时禁用默认事件//左侧鼠标拖拽位置if (clientX > EloffsetLeft && clientX < EloffsetLeft + 10) {//往左拖拽if (clientX > e.clientX) {dragDom.style.width = elW + (clientX - e.clientX) * 2 + 'px';}//往右拖拽if (clientX < e.clientX) {if (dragDom.clientWidth < minWidth) {} else {dragDom.style.width = elW - (e.clientX - clientX) * 2 + 'px';}}}//右侧鼠标拖拽位置if (clientX > EloffsetLeft + elW - 10 && clientX < EloffsetLeft + elW) {//往左拖拽if (clientX > e.clientX) {if (dragDom.clientWidth < minWidth) {} else {dragDom.style.width = elW - (clientX - e.clientX) * 2 + 'px';}}//往右拖拽if (clientX < e.clientX) {dragDom.style.width = elW + (e.clientX - clientX) * 2 + 'px';}}//底部鼠标拖拽位置if (ELscrollTop + clientY > EloffsetTop + elH - 20 && ELscrollTop + clientY < EloffsetTop + elH) {//往上拖拽if (clientY > e.clientY) {if (dragDom.clientHeight < minHeight) {} else {dragDom.style.height = elH - (clientY - e.clientY) * 2 + 'px';}}//往下拖拽if (clientY < e.clientY) {dragDom.style.height = elH + (e.clientY - clientY) * 2 + 'px';}}};//拉伸结束document.onmouseup = function (e) {document.onmousemove = null;document.onmouseup = null;};}}}}
})
// 注意引入在 Vue的下面
借鉴大佬的
原地址:
https://blog.csdn.net/weixin_41181778/article/details/105182382?ops_request_misc=&request_id=7200d8d086874d36bd146a9cd0a0ae57&biz_id=&utm_medium=distribute.pc_search_result.none-task-blog-2allkoosearch~default-17-105182382-null-null.142v92koosearch_v1&utm_term=%E9%A5%BF%E4%BA%86%E4%B9%88ui%E5%AF%B9%E7%9A%84dailog%E8%AE%BE%E7%BD%AE%E5%8F%AF%E7%A7%BB%E5%8A%A8%E5%92%8C%E7%BC%A9%E6%94%BE&spm=1018.2226.3001.4187
相关文章:
解决饿了么ui的对话框缩放和移动
import Vue from "vue";// v-dialogDrag: 弹窗拖拽水平方向伸缩 /** 使用方法* 将以下代码复制到一个js文件中,然后在入口文件main.js中import引入即可;* 给elementUI的dialog上加上 v-dialogDrag 指令就可以实现弹窗的全屏和拉伸了。* 给…...
Linux 中复制文件并保持修改时间等属性
一、遇到的问题 Linux使用cp命令复制文件备份时,发现文件的修改时间变成当前时间了,想要保留备份文件原有的修改时间及其它文件属性。 二、实现 1、cp命令 在 Linux 中,你可以使用 cp 命令来复制文件,并通过 -p 或 --preserve…...
Hugging News #0814: Llama 2 学习资源大汇总
每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新、社区活动、学习资源和内容更新、开源库和模型更新等,我们将其称之为「Hugging News」。本期 Hugging News 有哪些有趣的消息࿰…...
可视化绘图技巧100篇进阶篇(五)-阶梯线图(Step Chart)
目录 前言 图表类型特征 适用场景 图例 绘图工具及代码实现 ECharts SMARTBI...
GPT带我学-设计模式-命令模式
1 你知道设计模式的命令模式吗 是的,我知道设计模式中的命令模式。命令模式是一种行为型设计模式,它将请求封装成一个对象,从而允许使用不同的请求、队列或日志来参数化其他对象。命令模式还支持撤销操作,并且可以提供事务的实现…...
互联网发展历程:跨越远方,路由器的启示
互联网的蓬勃发展,一直在追求更广阔的连接,更遥远的距离。然而,在早期的网络中,人们面临着连接距离有限的问题。一项重要的技术应运而生,那就是“路由器”。 连接受限的问题:距离有限 早期的网络受限于直接…...
postman入门基础 —— 接口测试流程
一、编写接口测试计划 接口测试计划和功能测试计划目标一致,都是为了确认需求、确定测试环境、确定测试方法,为设计测试用例做准备,初步制定接口测试进度方案。一般来说,接口测试计划包括概述、测试资源、测试功能、测试重点、测试…...
springcloud+nacos实现灰度发布
灰度发布 gateway网关实现灰度路由 灰度发布实体 package com.scm.boss.common.bean;import lombok.Data; import lombok.experimental.Accessors;import java.io.Serializable;/*** 灰度发布实体*/ Data Accessors(chain true) public class GrayBean implements Serializ…...
【C++笔记】C++之类与对象(上)
【C笔记】C之类与对象(上) 1、类是结构体的升级2、类中可以定义的东西3、类访问限定符4、类的声明5、类的实例化(定义)6、类的大小的计算7、this指针 1、类是结构体的升级 C的一个显著特征就是兼容C语言,所以C把结构体“升级”成了“类”&am…...
ebay灯串UL报告 UL588检测标准
季节性和装饰性照明用品即灯串以及配件都是便携式插头连接的临时性商品,最大额定输入电压为 120 伏。 由 ILAC ISO 17025 认证的实验室出具的检测报告,确认每件商品均已经过检测,符合下列要求: 季节性和装饰性照明用品(灯串&…...
TCP/IP协议追层分析物理层(第三十九课)
TCP/IP协议追层分析物理层(第三十九课) 1 物理层:建立、维护、断开物理连接,定义了接口及介质,实现了比特流的传输。 1、传输介质分类 有线介质:网线(双绞线)、光纤 无线介质:无线电 微波 激光 红外线 2、双绞线分类: 五类cat5: 适用于100Mbps 超五类cat5e:适用于…...
Kotlin优点及为什么使用Kotlin
文章目录 一 Hello Kotlin二 Kotlin优点三 团队为什么采用 Kotlin 一 Hello Kotlin Kotlin和Andriod 二 Kotlin优点 三 团队为什么采用 Kotlin...
ES 概念
es 概念 Elasticsearch是分布式实时搜索、实时分析、实时存储引擎,简称(ES)成立于2012年,是一家来自荷兰的、开源的大数据搜索、分析服务提供商,为企业提供实时搜索、数据分析服务,支持PB级的大数据。 -- …...
Fairy下载和使用
写在最前:本系列中将会涉及到 Unity,C#,Lua和FairyGUI(FGUI)。 FairyGUI介绍 官网: FairyGUI 编辑器下载: FairyGUI 截至文档记录最新版: https://res.fairygui.com/FairyGUI-Ed…...
隧道HTTP优化程序示例
作为专业爬虫程序员,我们经常需要使用代理服务器处理大量的请求。但是,单一服务器往往无法承担高并发请求和HTTPS加密的压力,这时候我们可以利用CDN来优化性能,并实现反向代理和HTTPS加速。下面,让我们一步步来了解。 …...
Flink源码之State创建流程
StreamOperatorStateHandler 在StreamTask启动初始化时通过StreamTaskStateInitializerImpl::streamOperatorStateContext会为每个StreamOperator 创建keyedStatedBackend和operatorStateBackend,在AbstractStreamOperator中有个StreamOperatorStateHandler成员变量…...
selenium常见等待机制及其特点和使用方法
目录 1、强制等待 2、隐式等待 3、显示等待 1、强制等待 强制等待是在程序中直接调用Thread.sleep(timeout) ,来完成的,该用法的优点是使用起来方便,语法也比较简单,缺点就是需要强制等待固定的时间,可能会造成测试的时间过…...
C++物件数组的常用方法介绍
以下代码建立了一个物件数组Student,并展示了如何计算物件数组的长度,如何从物件数组中找到特定的对象,如何根据数组的不同参数进行排序,以及如何找到最大和最小值。 #include <iostream> #include <algorithm>using…...
云计算:新一代的技术革命
云计算,作为21世纪的一项重要技术革命,已在全球范围内引发了深远的影响。它改变了我们存储和处理数据的方式,使得企业无需再建设和维护昂贵的本地服务器和数据中心。本文将深入探讨云计算的基本概念,类型,主要优点&…...
数据结构—图的应用
6.4图的应用 概念回顾—生成树 生成树:所有顶点均由边连接在一起,但不存在回路的图。 一个图可以有许多棵不同的生成树、含有n个顶点 n-1 条边的图不一定是生成树所有生成树具有以下共同特点 生成树的顶点个数与图的顶点个数相同;生成树是图的…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...
