vue3,元素可拖拽,自定义指令,鼠标以及手指事件的写法不一样

使用很简单,直接

<div v-drag><div class="header"></div><div class="content"></div>
</div>
// 自定义指令 —— 拖动div
const vDrag = {// 在绑定元素的父组件// 及他自己的所有子节点都挂载完成后调用mounted(el: any, binding: any, vnode: any, prevVnode: any) {let oDiv = el // 当前元素oDiv.onmousedown = function (e: any) {// 鼠标按下,计算当前元素距离可视区的距离let disX = e.clientX - oDiv.offsetLeftlet disY = e.clientY - oDiv.offsetTopdocument.onmousemove = function (e) {// 通过事件委托,计算移动的距离let l = e.clientX - disXlet t = e.clientY - disY// 移动当前元素oDiv.style.left = l + 'px'oDiv.style.top = t + 'px'}document.onmouseup = function (e) {document.onmousemove = nulldocument.onmouseup = null}// return false不加的话可能导致黏连,就是拖到一个地方时div粘在鼠标上不下来,相当于onmouseup失效return false}},
}

当需求改成,只有拖动元素头部才可以移动,并且只能在视口范围内移动

// 自定义指令 —— 拖动div
const vDrag = {// 在绑定元素的父组件// 及他自己的所有子节点都挂载完成后调用mounted(el: any, binding: any, vnode: any, prevVnode: any) {let oDiv = el // 当前元素// 在oDiv中找到className为header的子元素const oDivHeader = oDiv.getElementsByClassName('header')[0]// 鼠标事件oDivHeader.onmousedown = function (e: any) {// 鼠标按下,计算当前元素距离可视区的距离let disX = e.clientX - oDiv.offsetLeft;let disY = e.clientY - oDiv.offsetTop;// 计算元素相对于视口的位置let viewportWidth = document.documentElement.clientWidth;let viewportHeight = document.documentElement.clientHeight;// 确保元素只能在视口内拖拽let maxLeft = viewportWidth - oDiv.clientWidth;let maxTop = viewportHeight - oDiv.clientHeight;document.onmousemove = function (e) {// 通过事件委托,计算移动的距离let newDisX = e.clientX - disX;let newDisY = e.clientY - disY;// 限制元素移动范围let newLeft = Math.max(Math.min(newDisX, maxLeft), 0);let newTop = Math.max(Math.min(newDisY, maxTop), 0);// 移动当前元素oDiv.style.left = newLeft + 'px';oDiv.style.top = newTop + 'px';}document.onmouseup = function (e) {document.onmousemove = nulldocument.onmouseup = null}// return false不加的话可能导致黏连,就是拖到一个地方时div粘在鼠标上不下来,相当于onmouseup失效return false}},
}

还是上述需求,加多个手指事件(写在 mounted 方法里)

// 手指事件let x = 0; // 记录元素拖拽时候的初始x轴位置let y = 0; // 记录元素拖拽时候的初始y轴位置oDivHeader.ontouchstart = function (es: any) {// console.log(es)// el.offsetLeft dom距离左侧的偏移量// el.offsetTop dom距离顶部的偏移量x = es.touches[0].pageX - oDiv.offsetLeft;y = es.touches[0].pageY - oDiv.offsetTop;document.ontouchmove = function (em) {let left = em.touches[0].pageX - x let top = em.touches[0].pageY - y let maxLeft = document.documentElement.clientWidth - oDiv.clientWidth;let maxTop = document.documentElement.clientHeight - oDiv.clientHeight;oDiv.style.left = Math.max(Math.min(left, maxLeft), 0) + "px";oDiv.style.top = Math.max(Math.min(top, maxTop), 0) + "px";};};el.ontouchend = function () {document.ontouchmove = null;};

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

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

相关文章

docker容器_自定义上传jenkins镜像(Dockerfile实现)

1.创建jenkins目录&#xff0c;并上传相应的包 mkdir /jenkins/ 2.创建一个Dockerfile文件 FROM daocloud.io/library/centos:7#把当前目录下的jenkins.war包传到内部容器的/ 下 ADD ./jenkins.war /#把当前目录下的jdk传到内部容器的/opt/,并解压 ADD ./jdk-11.0.19_linu…

程序解释与编译

▶1.程序的解释执行方式 程序语言强写的计策机指令序列称为“源程序”,计算机并不能直接执行用高级语言编写的源程序&#xff0c;源程序必须通过“翻译程序”翻译成机器指令的形式&#xff0c;计算机才能项别和执行。源程序的翻译有两种方式&#xff1a;解释执行和编译执行。不…

网络编程基础api

1. IP 协议 1.1 IP 分片 &#xff08;1&#xff09;IP 分片和重组主要依靠 IP 头部三个字段&#xff1a;数据报标识、标志和片偏移 以太网帧的 MTU 是 1500 字节&#xff1b; 一个每个分片都有自己的 IP 头部&#xff0c;它们都具有相同的标识值&#xff0c;有不同的片偏移…

css 十字分割线(含四等分布局)

核心技术 伪类选择器含义li:nth-child(2)第2个 lili:nth-child(n)所有的lili:nth-child(2n)所有的第偶数个 lili:nth-child(2n1)所有的第奇数个 lili:nth-child(-n5)前5个 lili:nth-last-child(-n5)最后5个 lili:nth-child(7n)选中7的倍数 border-right: 3px solid white;borde…

EasyExcel-最简单的读写excel工具类

前言&#xff1a; easyExcel 的官网文档给的示例非常全&#xff0c;可以参考https://easyexcel.opensource.alibaba.com/docs/current/quickstart/read 在此我贴出自己的工具类&#xff0c;可以直接用 导包 <dependency><groupId>com.alibaba</groupId><…

机器学习第15天:GBDT模型

☁️主页 Nowl &#x1f525;专栏《机器学习实战》 《机器学习》 &#x1f4d1;君子坐而论道&#xff0c;少年起而行之 ​​ 文章目录 GBDT模型介绍 Boosting 残差 GBDT的缺点 python代码实现 代码 模型参数解释 结语 GBDT模型介绍 GBDT&#xff08;Gradient Boos…

vivado $clog2函数

对于.v文件在vivado中是不支持&#xff0c;但是可以修改为.sv或更改文件属性使用sytemverilog来支持。 /*** Math function: $clog2 as specified in Verilog-2005** clog2 0 for value 0* ceil(log2(value)) for value > 1** This implementatio…

php+mysql期末作业小项目

目录 1、登录界面 2、注册界面 3、主界面 4、学生表界面 5 、查询学生界面​编辑 6、修改学生信息界面​编辑 7、删除学生信息界面 8、添加学生信息界面 9、后台数据库​编辑 一个简单的php➕mysql项目学生信息管理系统&#xff0c;用于广大学子完成期末作业的参考&…

测试架构工程师需要具备哪些能力 ?

前言 相比于我们常见的研发架构师&#xff0c;测试架构师是近几年才出现的一个岗位&#xff0c;当然岗位title其实没有特殊的含义&#xff0c;在我看来测试架构师其实更像对某一类人的抽象称呼和对其复合能力的期待及认可。 在聊这篇文章的主题之前&#xff0c;先来看这样一个…

算法训练营Day4(链表)

语言 采用的Java语言&#xff0c;一些分析也是用于Java&#xff0c;请注意。 24. 两两交换链表中的节点 24. 两两交换链表中的节点 - 力扣&#xff08;LeetCode&#xff09; 解题 这道题就是考验链表的基础操作&#xff0c;但是有个语言方面的知识需要去掌握&#xff0c;就是|…

TCP通信

第二十一章 网络通信 本章节主要讲解的是TCP和UDP两种通信方式它们都有着自己的优点和缺点 这两种通讯方式不通的地方就是TCP是一对一通信 UDP是一对多的通信方式 接下来会一一讲解 TCP通信 TCP通信方式呢 主要的通讯方式是一对一的通讯方式&#xff0c;也有着优点和缺点…

如何在Android平板上远程连接Ubuntu服务器使用code-server代码开发

目录 1.ubuntu本地安装code-server 2. 安装cpolar内网穿透 3. 创建隧道映射本地端口 4. 安卓平板测试访问 5.固定域名公网地址 6.结语 1.ubuntu本地安装code-server 准备一台虚拟机,Ubuntu或者centos都可以&#xff0c;这里以VMwhere ubuntu系统为例 下载code server服务…

el-table 表格多选(后端接口搜索分页)实现已选中的记忆功能。实现表格数据和已选数据(前端分页)动态同步更新。

实现效果&#xff1a;&#xff08;可拉代码下来看&#xff1a;vue-demo: vueDemo&#xff09; 左侧表格为点击查询调用接口查询出来的数据&#xff0c;右侧表格为左侧表格所有选择的数据&#xff0c;由前端实现分页。 两个el-table勾选数据联动更新 实现逻辑&#xff1a; el-…

低代码开发到底是补品还是垃圾食品?

2023&#xff0c;低代码彻底火了&#xff0c;甚至火到没有点相关经验&#xff0c;都不好意思出去面试的程度。 从业者对低代码的发展充满了想象&#xff0c;都认为未来低代码的商业价值不可估量。 据Gartner的最新报告显示&#xff0c;2023年全球低代码开发技术市场规模预计将…

内部文件上传以及渲染-接口API

文件上传 地址http://172.16.0.118:8090/api/pm/base/affix/upload请求类型POSTContent-Type:text/plain;charsetutf-8参数 prjData {"prjId":"", "jobId":"3031b2c8-c809-4110-8e88-22c80a9c1ec0721aca89-96a1-4346-9b6e-022331d221d1Nec…

【EMNLP 2023】面向Stable Diffusion的自动Prompt工程算法BeautifulPrompt

近日&#xff0c;阿里云人工智能平台PAI与华南理工大学朱金辉教授团队合作在自然语言处理顶级会议EMNLP2023上发表了BeautifulPrompt的深度生成模型&#xff0c;可以从简单的图片描述中生成高质量的提示词&#xff0c;从而使文生图模型能够生成更美观的图像。BeautifulPrompt通…

【MATLAB】MODWT分解+FFT+HHT组合算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 MODWT分解FFTHHT组合算法是一种综合性的信号处理方法&#xff0c;它结合了经验小波变换&#xff08;Empirical Wavelet Transform&#xff0c;EWT&#xff09;、快速傅里叶变换&#xff…

25.Oracle的回收站

oracle基础系统学习目录 01.CentOS7静默安装oracle11g 02.Oracle的启动过程 03.从简单的sql开始 04.Oracle的体系架构 05.Oracle数据库对象 06.Oracle数据备份与恢复 07.用户和权限管理 08.Oracle的表 09.Oracle表的分区 10.Oracle的同义词与序列 11.Oracle的视图 12.Oracle的…

爱智EdgerOS之深入解析如何应用爱智的视频流模块完成拉流

一、ONVIF 规范和常见视频流传输协议 ① ONVIF 规范 随着视频监控产业链的成熟&#xff0c;市面上陆陆续续出现了各式各样的网络摄像设备&#xff0c;这些设备都需要通讯协议才能进行数据传输。早期厂商都采用私有协议&#xff0c;但是现在厂商分工明确&#xff0c;有的负责生…

程序员的技术成长攻略

推荐语&#xff1a;偶尔在公众号看到的一篇文章&#xff0c;写的非常好&#xff0c;在此分享给各位程序员兄弟&#xff0c;不光是对技术成长有帮助&#xff0c;其他领域也是同样适用的&#xff01;建议反复阅读&#xff0c;形成一套自己的技术成长策略。 原文地址&#xff1a;…