vue3 拖拽插件(drag)

news2024/9/29 13:32:11

前端vue项目中,经常会有弹框拖拽的需求,下面介绍常用方法:
1.如果你使用的是elementPlus插件的el-dialog组件,只需要增加draggable属性即可,代码如下:

<el-dialog
    v-model="showDiloag"
    width="500"
    draggable
 ></e--dialog>

2.如果不使用ele 的组件,自己写弹框,那么可以自定义指令,代码如下(vue3):

drag.js文件:

const drag = {
  mounted(el, binding) {
    el.style.position = "absolute";
    const data = binding.value || { x: 0, y: 0, zIndex: 99999 };
    let { x, y, zIndex = 99999 } = data;
    el.style.left = x + "px";
    el.style.top = y + "px";
    el.style.zIndex = zIndex;
    let isDragging = false;
    let baseMousePosition = { x: 0, y: 0 };
    let dom = data.targetRef || document.getElementById(data.targetId) || el;
    dom.style.cursor = "move";
    const onDragStart = (e) => {
      if (e.button === 0) {
        isDragging = true;
        baseMousePosition.x = e.pageX;
        baseMousePosition.y = e.pageY;
        window.addEventListener("mousemove", onDraging);
      }
    };
    const onDragEnd = (e) => {
      isDragging = false;
      x = parseInt(el.style.left);
      y = parseInt(el.style.top);
      window.removeEventListener("mousemove", onDraging);
    };
    const onDraging = (e) => {
      if (isDragging) {
        el.style.left = e.pageX - baseMousePosition.x + x + "px";
        el.style.top = e.pageY - baseMousePosition.y + y + "px";
      }
    };
    dom.addEventListener("mousedown", onDragStart);
    window.addEventListener("mouseup", onDragEnd);
  },
};

const directives = {
  install: function (app) {
    app.directive('drag', drag)
  }
}
export default directives

vue文件使用:

<script setup>
import { ref } from "vue";

const dragRef = ref()
const dragOptions= ref({
  x: 100,
  y: 200,
  targetRef: dragRef,
})
</script>

<template>
	<div v-drag="dragOptions" class="dialog">
		<div class="dialog_header" ref="dragRef">弹框标题</div>
		<div class="dialog_content">弹框内容</div>
	</div>

<template>

这里的dragOptions就是配置项,x和y是弹框的初始位置的left和top值,targetRef的值是你希望鼠标在哪个dom元素可以拖拽,如果不传,就默认在整个弹框范围,都可以拖拽。

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

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

相关文章

中国国画-孙溟㠭浅析碑帖《龙藏寺碑》

中国国画——孙溟㠭浅析碑帖《龙藏寺碑》 《龙藏寺碑》 《龙藏寺碑》 全称是《恒州刺史鄂国公为国劝造龙藏寺碑》&#xff0c;属楷书体。碑通高3.15米&#xff0c;宽0.90米&#xff0c;厚0.29米。碑文楷书30行&#xff0c;行50字&#xff0c;1500余字&#xff0c;碑为龟趺。…

基于开源WQ装备知识图谱的智能问答优化2

基于笔者之前写的博客基础上&#xff1a;https://blog.csdn.net/zhanghan11366/article/details/142139488【基于开源WQ装备知识图谱的智能问答全流程构建】进行优化。新增处理基于特定格式下的WQ文档&#xff0c;抽取文档的WQ属性和关系&#xff0c;并抽取对应WQt图片存储至mi…

支付宝开放平台-开发者社区——AI 日报「9 月 29 日」

1 支付宝进军大模型医疗应用&#xff0c;技术一号位&#xff1a;我们有4个切入点 量子位&#xff5c;阅读原文 面对来势汹汹的大模型应用浪潮&#xff0c;支付宝医疗技术一号位魏鹏这样说道。今年&#xff0c;蚂蚁大举进军医疗&#xff0c;已是再明显不过。作为蚂蚁大模型应用…

零基础快速上手JAVA代码审计

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

吐血整理:国内一站式儿童有声绘本创作平台

儿童绘本儿童故事这个领域在Stable Diffusion、Midjourney、ChatGPT产品推出后开始有大量自媒体达人纷纷发布教程&#xff0c;热度一直都在。但由于创作门槛较高、需要对AI类和制作类软件都需要掌握、流程制作复杂&#xff0c;且由于创作者提示词的影响出图效果不稳定&#xff…

LeetCode 面试经典150题 69.x的平方根

题目&#xff1a;给你一个非负整数 x &#xff0c;计算并返回 x 的 算术平方根 。 由于返回类型是整数&#xff0c;结果只保留 整数部分 &#xff0c;小数部分将被 舍去 。注意&#xff1a;不允许使用任何内置指数函数和算符&#xff0c;例如 pow(x, 0.5) 或者 x ** 0.5 。 思…

「实战应用」如何用DHTMLX Gantt集成工具栏部件更好完成项目管理?

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求&#xff0c;是最完善的甘特图图表库。 今天给大家分享一种方法&#xff0c;通过将DHTMLX Gantt集成工具栏来简化交互&#xff0c;为此选用了DHTMLX Suite的Toolbar&#…

互联网大厂不喜欢提拔老实人,因为老实人除了老实和干活踏实之外,在职场没其他优点...

上一篇&#xff1a;一线体面男的收入 最近&#xff0c;在互联网上有一个热门的话题&#xff0c;戳中了很多人的内心。 一位来自互联网的朋友发帖吐槽职场&#xff0c;说领导都不喜欢提拔老实人。因为老实人一般除里老实和干活踏实外&#xff0c;在职场基本没有其他的优点&#…

L8打卡学习笔记

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 SVM与集成学习 SVMSVM线性模型SVM非线性模型SVM常用参数 集成学习随机森林导入数据查看数据信息数据分析随机森林模型预测结果结果分析 个人总结 SVM 超平面&…

Windows如何远程Kylin系统

Windows如何远程Kylin系统 一. 配置 yum源 二. 清理yum缓存 三. 安装VNC并配置 nkvers yum install tigervnc tigervnc-server -ycp /lib/systemd/system/vncserver.service /etc/systemd/system/vncserver:1.service 说明&#xff1a;vncserver:1.service中的&#xff1a;1表…

HCIP和HCIE有什么区别呢?

HCIP和HCIE有什么区别呢&#xff1f;今天给大家介绍下两者的不同 ‌认证层次‌&#xff1a;HCIE屹立于华为认证体系的顶端&#xff0c;定位为专家级认证&#xff1b;而HCIP则位于中坚位置&#xff0c;属于中级认证。 难度与专业要求‌&#xff1a;通往HCIE之路布满挑战&…

refline.js, 一款开箱即用的参考线吸附插件

嗨, 大家好, 我是徐小夕. 之前一直在社区分享零代码&低代码的技术实践&#xff0c;也陆陆续续设计并开发了多款可视化搭建产品&#xff0c;比如&#xff1a; H5-Dooring&#xff08;页面可视化搭建平台&#xff09;橙子试卷&#xff08;表单搭建引擎&#xff09;flowmix/fl…

Linux设备上cifx板卡作为ethercat从站的调试记录

调试目标&#xff1a; PC主机作为ethercat主站&#xff0c;linux设备上的cifx板卡作为ethercat从站&#xff0c;实现两边的正常交互。 环境准备&#xff1a; windows系统的PC&#xff0c;PC上的intel网卡&#xff08;必须选用支持做主站的网卡型号&#xff09;&#xff0c;l…

【YashanDB知识库】GBK库,生僻字插入nvarchar2字段后乱码问题

本文内容来自YashanDB官网&#xff0c;具体内容可见(https://www.yashandb.com/newsinfo/7488287.html?templateId1718516) 问题现象 如下SQL&#xff0c;插入的人名中有两个GBK生僻字“ ”和“ ”&#xff0c;GBK编码中没有这两个字符。 插入后&#xff0c;客户端utf8编码…

【Router】路由功能之端口转发(Port Forward)功能介绍及实现

端口转发&#xff08;Port Forward&#xff09; 端口转发是一种网络技术&#xff0c;它允许将传入到一个网络设备特定端口的网络流量转发到另一个设备的特定端口上&#xff0c;端口转发会创建一条通过路由器的路径&#xff0c;以便数据包可以到达网络内的设备。在路由器中创建端…

区块链:数据安全与透明的未来触手可及

在这个数字化的时代&#xff0c;信息的安全与透明性就像社会发展的两根支柱&#xff0c;愈发显得重要。而区块链技术的崛起&#xff0c;宛如一道耀眼的曙光&#xff0c;照亮了我们面临的挑战。简单来说&#xff0c;区块链是一种去中心化的数据库技术&#xff0c;它允许信息在多…

大语言模型(LLM)效率优化技术全面综述:模型优化、数据优化、框架优化

大语言模型&#xff08;LLMs&#xff09;在自然语言理解、语言生成和复杂推理等重要任务中展示了显著的能力&#xff0c;并且有潜力对我们的社会产生重大影响。然而&#xff0c;这些能力伴随着它们所需的大量资源&#xff0c;突出了开发有效技术以解决它们的效率挑战的强烈需求…

深入浅出MongoDB(三)

深入浅出MongoDB&#xff08;三&#xff09; 文章目录 深入浅出MongoDB&#xff08;三&#xff09;复制副本集设置分片分片实例备份与恢复监控ObjectId 复制 复制时将数据同步在多个服务器的过程&#xff0c;提供了数据的冗余备份&#xff0c;在多个服务器上存储数据副本&#…

操作平台使用中应每月不少于几次定期检查?

在当今数字化时代&#xff0c;操作平台作为企业与个人日常运营的核心载体&#xff0c;其稳定性和安全性直接关系到业务的高效运行与数据的严密保护。因此&#xff0c;定期进行操作平台的检查与维护&#xff0c;成为了不可忽视的重要环节。特别是&#xff0c;确保每月进行不少于…

肯富来 CRM 数字化项目启动,引领企业“智”变新时代

近年来&#xff0c;广东肯富来泵业股份有限公司&#xff08;以下简称“肯富来”&#xff09;开启企业数字化、智能化转型之路&#xff0c;利用云计算技术贯通全制程的信息化管理系统、通过高速网络端到端全覆盖实现生产可视化&#xff0c;并通过远程数据系统&#xff0c;帮助客…