vue实现a-model弹窗拖拽移动

通过自定义拖拽指令实现

实现效果

拖动顶部,可对整个弹窗实施拖拽(如果需要拖动底部、中间内容实现拖拽,把下面的ant-modal-header对应改掉就行)

请添加图片描述

代码实现

编写自定义指令

新建一个ts / js文件,用ts举例

import Vue from "vue";// 自定义指令使弹窗可拖动Vue.directive("drag-modal", (el, bindings, vnode) => {Vue.nextTick(() => {// 获取弹窗的属性let { visible, destroyOnClose } = vnode.componentInstance as any;if (!visible) return;let modal: any = el.getElementsByClassName("ant-modal")[0];let header: any = el.getElementsByClassName("ant-modal-header")[0];header.style.cursor = "move"; // 移动到顶部时,鼠标变成“移动”图// 存储上一次拖拽完成时的偏移数据let left = 0;let top = 0;// 未定义 destroyOnClose 时,dom未被销毁,关闭弹窗再次打开,弹窗会停留在上一次拖动的位置if (!destroyOnClose) {left = modal.left || 0;top = modal.top || 0;}// top 初始值为 offsetTop// 因为 modal 初始就有垂直偏移,水平方向没有(是用 margin 保证 modal 在中间的)if (typeof modal.left !== "number") {top = top || modal.offsetTop;}header.onmousedown = (e: any) => {let startX = e.clientX;let startY = e.clientY;el.onmousemove = (event) => {let endX = event.clientX;let endY = event.clientY;modal.left = endX - startX + left; // 记录实时偏移量,数字格式modal.top = endY - startY + top;modal.style.left = modal.left + "px"; // 实时改变modal偏移modal.style.top = modal.top + "px";};el.onmouseup = (event) => {left = modal.left; // 存储偏移量,便于下一次拖拽使用top = modal.top;el.onmousemove = null;el.onmouseup = null;header.releaseCapture && header.releaseCapture(); // 释放捕捉鼠标或键盘事件};header.setCapture && header.setCapture(); // 捕获鼠标或键盘事件,使得即使鼠标移出元素范围或失去焦点,元素仍然可以接收这些事件};});
});

使用方式

使用

<a-modalv-drag-modal:visible="visible":destroyOnClose="true"...
>

选择性添加destroyoncLose属性,添加此属性则弹窗每次打开会回到初始位置

引入

import "@/common/utils/drag-modal";

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

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

相关文章

基于modbus tcp通讯的雷赛导轨控制器调试软件

0.前言 之前工作遇到了雷赛电机驱动器设备&#xff0c;主要是用来控制光学导轨移动。雷赛的调试软件用的时串口通讯&#xff0c;还要他们定制的串口线&#xff0c;在现场都是485转网络的接口&#xff0c;调试起来也很不方便。所以我就照着他们的说明书&#xff0c;写了一个简易…

Vue3 引入Vanta.js使用

能搜到这篇文章 想必一定看过demo效果图了吧 示例 Vanta.js - Animated 3D Backgrounds For Your Website (vantajs.com) 1. 引入 在根目录 index.html中引入依赖 <script src"https://cdnjs.cloudflare.com/ajax/libs/three.js/r134/three.min.js"></sc…

基于SpringBoot+VueJS+微信小程序技术的图书森林共享小程序设计与实现:7000字论文+源代码参考

博主介绍&#xff1a;硕士研究生&#xff0c;专注于信息化技术领域开发与管理&#xff0c;会使用java、标准c/c等开发语言&#xff0c;以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年&#xff0c;拥有近12年的管理工作经验&#xff0c;拥有较丰富的技术架…

详解 @MapperScan 注解和 @Mapper 注解

文章目录 1. Mapper 注解1.1 Mapper 注解的定义和用途1.2 Mapper 注解的使用示例 2. MapperScan 注解2.1 MapperScan 注解的定义和用途2.2 MapperScan 注解的使用示例 3. Mapper 注解与 MapperScan 注解的区别4. 使用 Mapper 和 MapperScan 的注意事项5. Mapper 和 MapperScan …

我会什么开发技能

java我会什么&#xff1f; 一、并发编程 1、并发编程&#xff1a;jdk中的courren包只能够类实现&#xff08;seamplore&#xff0c;CountDownLaunch&#xff0c;Pharse&#xff0c;CycliBarrier&#xff0c;CompletableFuture&#xff09;&#xff0c;AQS的原理&#xff0c;线…

mysql笔记1

查询是在mysql中耗时最多的&#xff0c;约束是非常消耗cpu性能&#xff0c;外国不承认阿里的代码规范&#xff0c;在页面小报错没关系&#xff0c;库1与库2相互不影响&#xff0c;mysql被orcle收购了&#xff0c;所以mysql也属于oracle,企业中不允许推倒重来utf8mb3更适合中文 …

基于FPGA设计基础知识

基于FPGA设计基础知识 数字电路&#xff08;数电&#xff09;知识模拟电路&#xff08;模电&#xff09;知识1. 放大器1.1. 晶体管放大器1.2. 运算放大器1.3. 管子放大器&#xff08;真空管放大器&#xff09;微处理器/单片机知识其他相关知识 基于FPGA的算法设计是一个跨学科的…

底软驱动 | U-boot移植点点滴滴

u-boot 移植要点 一般厂家直接提供 u-boot 源码&#xff0c;做查看、修改(增加新功能) 或 u-boot 版本升级这三大块的用处&#xff1b;后两种都需要对新板子做适配/移植。 如果没有提供 u-boot 源码&#xff0c;那么就从 u-boot 官方版本中找到一个最相近的板子配置进行移植&…

【QT】布局管理器

布局管理器 布局管理器1. 垂直布局2. 水平布局3. 网格布局4. 表单布局5. Spacer 布局管理器 之前使⽤ Qt 在界⾯上创建的控件, 都是通过 “绝对定位” 的⽅式来设定的&#xff1b;也就是每个控件所在的位置, 都需要计算坐标, 最终通过 setGeometry 或者 move ⽅式摆放过去。 …

Log4j的原理及应用详解(四)

本系列文章简介&#xff1a; 在软件开发的广阔领域中&#xff0c;日志记录是一项至关重要的活动。它不仅帮助开发者追踪程序的执行流程&#xff0c;还在问题排查、性能监控以及用户行为分析等方面发挥着不可替代的作用。随着软件系统的日益复杂&#xff0c;对日志管理的需求也日…

深入理解C++ 中的可调⽤对象

C中的可调⽤对象总结 普通函数类成员函数类静态成员函数与类成员函数的区别 仿函数简单示例高级用法-状态保持优缺点优点缺点 函数指针获取函数地址声明并调用函数指针 lambda表达式语法定义捕获单个捕获符 std::function()协程 可调用对象用处⼴泛&#xff1a; ⽐如在使⽤⼀些…

排序-java(详解)

一&#xff0c;分类 主要的排序大致分为以下几类&#xff1a; 1&#xff0c;插入排序&#xff0c;又分为直接插入排序和希尔排序 2&#xff0c;选择排序&#xff0c;又分为选择排序和堆排序 3&#xff0c;交换排序&#xff0c;又分为冒泡排序和快速排序 4&#xff0c;归并…

【linux】服务器安装及卸载pycharm社区版教程

【linux】服务器安装及卸载pycharm社区版教程 【创作不易&#xff0c;求点赞关注收藏】 文章目录 【linux】服务器安装及卸载pycharm社区版教程1、到官网下载安装包2、通过终端wget下载安装包3、解压4、安装5、设置环境变量6、运行pycharm7、删除pycharm安装包、卸载pycharm …

从“卷模型”到“卷应用”:AI时代的价值重塑与个性化智能探索

&#x1f308;所属专栏&#xff1a;【其它】✨作者主页&#xff1a; Mr.Zwq✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01; 您的点…

使用独享代理IP安全性高不高?怎么辨别独享IP和共享IP?

在网络安全的多种工具和技术中&#xff0c;代理IP是常用的一种手段&#xff0c;尤其是在处理需要隐私保护和安全性的网络请求时。独享代理IP&#xff08;专用代理&#xff09;和共享代理IP是两种主要的代理类型&#xff0c;它们在安全性、性能和成本方面有着本质的区别。本文将…

【漏洞复现】华测监测预警系统2.2 UserEdit.aspx SQL注入

声明&#xff1a;本文档或演示材料仅用于教育和教学目的。如果任何个人或组织利用本文档中的信息进行非法活动&#xff0c;将与本文档的作者或发布者无关。 一、漏洞描述 华测监测预警系统2.2&#xff08;HuaCe Monitoring and Early Warning System 2.2&#xff09;是一款由华…

人工智能算法工程师(中级)课程9-PyTorch神经网络之全连接神经网络实战与代码详解

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能算法工程师(中级)课程9-PyTorch神经网络之全连接神经网络实战与代码详解。本文将给大家展示全连接神经网络与代码详解&#xff0c;包括全连接模型的设计、数学原理介绍&#xff0c;并从手写数字识别到猫狗识…

【第32章】MyBatis-Plus之代码生成器配置

文章目录 前言一、概述1.特点说明2.示例配置3. 数据库配置 (DataSourceConfig) 二、全局配置 (GlobalConfig)1.方法说明2.示例配置 三、包配置 (PackageConfig)1. 方法说明2. 示例配置 四、模板配置 (TemplateConfig)1. 方法说明2. 示例配置 五、注入配置 (InjectionConfig)1. …

使用 exe4j 转换 Java jar 程序为 Windows 平台可执行文件 (.exe)

使用 exe4j 转换 Java jar 程序为 Windows 平台可执行文件 &#xff08;.exe&#xff09; 介绍exe4j 特点&#xff1a;转换全过程&#xff08;软件操作&#xff09;1、注册2、选择模式3、配置应用4、选择执行的方式&#xff08;我这里管这个叫呈现方式&#xff09;5、选择 JAR …

Mybatis 学习之 数字字符串判断“失效”问题

目录 1. 现象2. 原因3. 解决4. 特别注意 1. 现象 <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper…