vue封装弹窗元素拖动指令

项目开发过程中我们通常会遇到需要到一些弹窗鼠标可以随意拖动位置去放置,vue里面直接通过封装对应的指令即可,于是封装了一个出来,希望可以用到。

Vue.directive('draggable-dom', draggableDom);

组件节点添加对应指令就可以

v-draggable-dom="{zIndex: 999, top: 10, left: 50}"

<div class="search-bar" ref="seachBar" :style="{ width }" v-draggable-dom="{zIndex: 999, top: 10, left: 50}">

指令代码:

/*** 拖拽元素指令* @param { Number } top  // 初始位置top 坐标 默认为元素本身的top* @param { Number } left  // 初始位置left 坐标 默认为元素本身的left* @param { Number } zIndex  // 层级,默认为9999*/
export const draggableDom = {bind(el, binding, vnode) {// 初始化变量let startX = 0; // 鼠标按下时的初始 X 坐标let startY = 0; // 鼠标按下时的初始 Y 坐标let initialLeft = 0; // 元素的初始 left 值let initialTop = 0; // 元素的初始 top 值let isDragging = false; // 拖拽状态if (binding.value?.position) {e.style.position = binding.value?.position;}// 如果属性定位没有的时候则设置绝对定位const position = window.getComputedStyle(el);if (!position || position == 'static') {e.style.position = "absolute";}// el.style.cursor = "move"; // 设置鼠标样式为移动图标// 默认层级,默认为9999el.style.zIndex = binding?.value?.zIndex || 9999;// 传入top值if (binding.value?.top) {// let top = el.getBoundingClientRect().top;let top = binding.value?.top;el.style.top = `${top}px`;}// 传入left值if (binding.value?.left) {// let left = el.getBoundingClientRect().left;let left = binding.value?.left;el.style.left = `${left}px`;}// 鼠标按下事件处理函数const onMouseDown = (event) => {// 防止文本选择// event.preventDefault();// 记录初始鼠标位置和元素位置startX = event.clientX;startY = event.clientY;initialLeft = el.offsetLeft;initialTop = el.offsetTop;isDragging = true; // 开启拖拽状态// 监听 mousemove 和 mouseup 事件document.addEventListener("mousemove", onMouseMove);document.addEventListener("mouseup", onMouseUp);};// 鼠标移动事件处理函数const onMouseMove = (event) => {if (!isDragging) return; // 如果未处于拖拽状态,直接返回// 计算鼠标的位移const moveX = event.clientX - startX;const moveY = event.clientY - startY;// 更新元素的位置el.style.left = initialLeft + moveX + "px";el.style.top = initialTop + moveY + "px";};// 鼠标松开事件处理函数const onMouseUp = () => {isDragging = false; // 关闭拖拽状态// 移除事件监听器document.removeEventListener("mousemove", onMouseMove);document.removeEventListener("mouseup", onMouseUp);};// 绑定 mousedown 事件el.style.position = "absolute"; // 确保元素是绝对定位el.addEventListener("mousedown", onMouseDown);},// 解绑指令unbind(el) {// 移除 mousedown 事件监听器el.removeEventListener("mousedown", onMouseDown);},
};

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

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

相关文章

将广播发送和接收端实现一遍,完成一个发送端发送信息,对应多个接收端接收信息实验。

1、将广播发送和接收端实现一遍&#xff0c;完成一个发送端发送信息&#xff0c;对应多个接收端接收信息实验。 接受端 #include<myhead.h> #define handel_err(res,val) if(val-1){perror(res);return-1;} int main(int argc, const char *argv[]) {int rfdsocket(AF_…

基本算法——聚类

目录 创建工程 加载数据 聚类算法 评估 完整代码 结论 相比于有监督的分类器&#xff0c;聚类的目标是从一组未打标签的数据中识别相似对象组。它可 以用于识别同类群体的代表性样本&#xff0c;找到有用与合适的分组&#xff1b;或者找到不寻常的样本&#xff0c;比如 异…

uniapp中的条件编译

在script中 // #ifdef APP-PLUS console.log("11"); // #endif// #ifdef MP-WEIXIN console.log("22"); // #endif 在template中 <!-- #ifdef APP-PLUS --><view>哈哈哈</view> <!-- #endif --><!-- #ifdef MP-WEIXIN -->…

day21-ubuntu入门

小趣味docker 1.安装docker&#xff0c;从阿里云的yum yum install docker -y 2.需要提前准备好docker镜像&#xff0c;确保可用 docker -v 3.导入该游戏镜像&#xff08;先用systemctl start docker&#xff09; docker load < game_v2.tar 4.一条命令&#xff0c;在…

vue3 学习与实战

1. Vue3简介 2020年9月18日&#xff0c;Vue.js发布版3.0版本&#xff0c;代号&#xff1a;One Piece&#xff08;n 经历了&#xff1a;4800次提交、40个RFC、600次PR、300贡献者 官方发版地址&#xff1a;Release v3.0.0 One Piece vuejs/core 截止2023年10月&#xff0c;最…

Three.js滚动画案例精选

今天为大家带来 3 个基于滚动动画的网站 Demo&#xff0c;它们不仅视觉效果惊艳&#xff0c;而且每个案例的源码都已开源在 GitHub&#xff0c;方便大家学习和借鉴&#xff01; 3D照片墙滚动 通过滚动操作实现 3D 网格效果以及动态过渡动画。这个案例使用了 GSAP 的 SplitTex…

地理数据库Telepg面试内容整理-描述你如何在GIS应用中使用空间数据进行分析并生成可视化结果

在 GIS(地理信息系统)应用中,使用空间数据进行分析并生成可视化结果是一项关键功能。空间数据的分析和可视化帮助用户理解地理现象、发现模式,并做出数据驱动的决策。以下是一个关于如何在 GIS 应用中使用空间数据进行分析并生成可视化结果的详细描述。 准备空间数据 在进行…

若依(spring-cloud)修改登陆密码加密算法

文章目录 前言一、解决办法二、解决过程1 为啥要改加密算法2 找不到校验代码 总结 前言 若依是一套快速集成各种中间件的配套 Java 后端框架&#xff0c;本文旨在描述修改其登陆的加密算法。文章的大前提是后端框架是若依哈&#xff0c;不是的话可以跳过了~&#xff01; 文章…

Flutter富文本实现学习

Flutter 代码如何实现一个带有富文本显示和交互的页面。 前置知识点学习 RealRichText RealRichText 和 ImageSpan 不是 Flutter 框架中内置的组件&#xff0c;而是自定义的组件或来自第三方库。这些组件的实现可以提供比标准 RichText 更丰富的功能&#xff0c;比如在富文本…

MBox20边缘计算网关助力各种数字化升级

在当今全球范围内数字化浪潮的强劲推动下&#xff0c;企业对数据处理与传输能力的需求正以前所未有的速度增长。制造业的心脏地带——工厂&#xff0c;其数字化转型已成为驱动生产效率飞跃、成本控制优化及竞争力显著提升的关键路径。在此过程中&#xff0c;明达技术MBox20边缘…

el-table动态行和列及多级表头

主页面 <template><div class"result-wrapper"><dynamic-table :table-data"tableData" :table-header"tableConfig" :tableTitle"tableTitle" :flowParams"flowParams"></dynamic-table></div…

RocketMQ(二)RocketMQ实战

文章目录 一、RocketMQ实战1.1 批量消息发送1.2 消息发送队列自选择1.3 事务消息1.4 SpringCloud集成RocketMQ 二、最佳实践2.1 生产者2.1.1 发送消息注意事项2.1.2 消息发送失败处理方式 2.2 消费者2.2.1 消费过程幂等2.2.2 消费打印日志 2.3 Broker 三、相关问题3.1 为什么要…

2-194基于matlab的四足机器人行走程序设计

基于matlab的四足机器人行走程序设计&#xff0c;正运动设计&#xff0c;逆运动学解算&#xff0c;步态设计。可定义机身高、步长、步高、一个摆相的市场等参数。输出四足机器人动态行走结果&#xff0c;及摆相示意图。程序已调通&#xff0c;可直接运行。 2-194基于matlab的四…

android studio android sdk下载地址

android studio安装后&#xff0c;因为公司网络原因&#xff0c;一直无法安装android sdk 后经过手机网络&#xff0c;安装android sdk成功如下&#xff0c;也可以手动下载后指定android sdk本地目录 https://dl.google.com/android/repository/source-35_r01.zip https://dl…

字符串和对象之间的转换

使用&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.76</version> </dependency> public class Demo3 {public static void main(String[] args) {Person person …

conda常用维护命令

文章目录 1. 初始化和更新 Conda更新 Conda初始化 Conda&#xff08;如果需要&#xff09; 2. 管理环境创建新环境激活环境停用当前环境列出所有环境删除环境 3. 管理包安装包卸载包更新包更新所有包查找包列出已安装包 4. 导入导出环境导出环境配置从文件创建环境 5. 管理通道…

window如何将powershell以管理员身份添加到右键菜单?(按住Shift键显示)

window如何将powershell以管理员身份添加到右键菜单&#xff1f; 在 Windows 中&#xff0c;将 PowerShell 以管理员身份添加到右键菜单&#xff0c;可以让你在需要提升权限的情况下快速打开 PowerShell 窗口。以下是详细的步骤&#xff0c;包括手动编辑注册表和使用注册表脚本…

【NebulaGraph】变化的多跳查询

【NebulaGraph】变化的多跳查询 1. 需求2. 解决方案2.1 确定查询结构2.2 构建查询语句 3. 追加需求&#xff1a;如果增加每一跳都要指定查询某SPACE下的Tag&#xff0c;或者不查询某个Tag怎么办 1. 需求 存在多跳请求&#xff0c;其中每一跳是从上一跳查询结果为基础的。但是 …

【Rust自学】7.3. 路径(Path)Pt.2:访问父级模块、pub关键字在结构体和枚举类型上的使用

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 7.3.1. super 我们可以通过在路径开头使用super来访问父级模块路径中的内容&#xff0c;就像使用..语法启动文件系统路径。例如&#xff…

华为ensp-BGP联盟

学习新思想&#xff0c;争做新青年&#xff0c;今天学习BGP联盟 实验介绍 一个BGP联盟是一个具有内部层次结构的AS。一个BGP联盟由若干个子AS 组成&#xff0c;子AS也称为成员AS。对于一个BGP联盟&#xff0c;其成员AS内部的各路由器之间需要建立全互联的IBGP邻居关系或使用B…