原生JS鼠标拖拽的原理及实现

python模拟银行交易流水 模拟自动生成银行交易流水,其中包括:入账账号、出账账号、交易金额、交易余额、交易时间、出入表示关键字段 阅读详情

JS鼠标拖拽的原理及实现

原生JS鼠标拖拽的原理及实现。

我们在网页操作的时候,经常用到鼠标拖拽元素的行为。今天就来讨论一下鼠标拖拽元素的原理及简单的实现过程。 首先鼠标拖拽要用到三大事件。 onmousedown:鼠标选择元素 onmousemove:鼠标移动元素 onmouseup:释放元素 也就是先用鼠标点击元素,然后拖拽元素到某一位置,释放元素的过程。在这个选择,移动,释放的过程中有这些步骤:

1、当鼠标选择元素时,onmousedown事件,计算鼠标的位置

怎么计算鼠标在元素上的位置呢?

images

如上图,A点为鼠标在元素上的位置。我们需要计算的是C段的距离。那么我们可以用鼠标到文档的距离减去元素的文档的距离(B段)就能得到C段的距离,也就是鼠标在元素上的位置。 然后将C段的距离用变量存起来。 鼠标到文档的距离是:ev.clientX 元素到文档的距离是:offsetLeft

2、当元素移动到某一个位置的时候,我们要知道元素在文档的位置。也就是要得出B段的距离

images

我们在步骤1的时候已经得出了C段的距离,也就是鼠标到元素的距离。当元素移动的时候,我们要得出B段的距离,这个时候就用鼠标到文档的距离减去鼠标到文档的距离(C段)即可。 onmousemove事件:当鼠标在一个元素上移动时候触发 触发的频率并不是按照像素来计算的,而是按照间隔时间来计算的。在一定时间内,当鼠标的位置与上一次的位置发生了改变,就会触发一次。

3、同样的,确定鼠标和元素在文档的位置,也要用到Y轴的值。和X轴类似。

4、当鼠标要释放元素时,让其onmouseup的值和onmousemove的值等于null即可。

下面是执行过程:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>拖拽的原理及实现</title>
<style>
	#div{width: 100px;height: 100px;background: red;position: absolute;left:200px;top:200px;}
</style>
</head>
<body>
	<div id="div"></div>
</body>
</html>
JS代码
<script type="text/javascript">
window.onload=function(){

	var oDiv=document.getElementById('div');

	oDiv.onmousedown=function(ev){

		var ev=ev||event;

		var oLeft=ev.clientX - this.offsetLeft;
		var oTop=ev.clientY - this.offsetTop;

	document.onmousemove=function(ev){
		var ev=ev||event;

		oDiv.style.left=ev.clientX-oLeft+'px';

		oDiv.style.top=ev.clientY-oTop+'px';
	}

	document.onmouseup=function(){

		document.onmousemove=document.onmouseup=null;
	}
    }
}
</script>

在线操作

总结:

1、拖拽中发生三大事件,因此我们要写三段代码

2、在编写的过程中,我误将三个事件写成单独的三段,结果导致在onmousedown中声明的变量在onmousemove中不起效果。所有事件包含在一个函数里面,再函数里面再进行事件的执行。


YOLOv11 改进 - 注意力机制 | EMA (Efficient Multi-Scale Attention) 高效多尺度注意力:跨空间学习与多分支协同增强特征表征,优化多尺度目标检测 本文介绍了高效多尺度注意力(EMA)模块及其在YOLOv11中的结合应用。现有注意力机制在通道维度缩减时可能影响深度视觉表示,EMA模块通过结合通道和空间信息、采用多尺度并行子网络结构等创新点,实现了高效的多尺度注意力机制。其基本原理包括通道和空间注意力结合、多尺度并行子网络设计等。在多个流行基准数据集上的实验表明,该模块能有效提高特征表示能力。我们将EMA集成进YOLOv11,实验证明改进后的模型在目标检测任务中性能优越,具有广泛应用前景 阅读详情

相关推荐

sid图像数据_遥感影像数据

影像数据基本概念影像数据是由卫星或飞机上的成像系统获得的影像,多为遥感影像数据。影像数据的每个像元都有一个值,表示传感器探测到像素对应地面面积上目标物的电磁辐射强度,也叫亮度值、灰度值。SuperMap支持的影像数据格式有:*.img、*.tif、*.tiff、*.bmp、*.jpg、*.png、*.gif、*.raw、*.sid等。计算机以二进制记录数据,所以其量化的等级以二进制来划分,即2n。...

weixin_39534395的博客 1626

JS 事件类型之鼠标事件

鼠标事件 1 . click 鼠标左键点击 = mousedown + mouseup 2 . mousedown 鼠标左/右键摁下 3 . mouseup 鼠标左/右键松开 document.onmousedown = function(e){ console.log('mousedown') } document.onclick = function(e){ console.log('click') } document.onmouseup = function(){ console.log

qq_45560350的博客 1696

Mediapipe入门——搭建姿态检测模型并实时输出人体关节点3d坐标(2024.1.4更新)

Mediapipe入门,利用mediapipe搭建人体整体检测模型,并输出右手21个关节点的坐标;mp_holistic.Holistic函数理解,mp_holistic.Holistic.process函数理解;mp.solutions.drawing_utils.draw_landmarks函数理解;Mediapipe实时姿态估计,3d骨架铰接图,matplotlib和Mediapipe绘图

kalakalabala的博客 6万+

js中的拖拽

拖拽 dom javascript

betterangela的博客 3952

MIPI信号的分析--结合示波器实际测试波形

如果排查的思路对你有帮助,请记住 消雨匆匆 or 大吊工。码字和排查很累,仅此而已 ,硬件不是抄电路,拿烙铁,懂点软件,细致分析,找问题和破案搜集线索是一样的。 部分内容来自于此博客的大神总结: http://www.elecfans.com/news/wangluo/20170323499614.html http://www.elecfans.com/yuanqijian/jieko...

消雨匆匆 4万+

交流异步机VVVF变频控制simulink/matlab仿真分析

VVVF,是Variable Voltage and Variable Frequency的缩写, 意为:可变电压、可变频率,也就是变频调速系统。 VVVF控制的逆变器连接电机,通过同时改变频率和电压,达到磁通恒定(可以用反电势/频率近似表征)和控制电机转速(和频率成正比)的目的,所以多应用在变频器中,属于工业自动化领域。

Ezekiel_Mok的博客 4209

JavaScript实现鼠标拖拽效果

利用鼠标指针的坐标(event.pageX,event.pageY)与鼠标相对于拖拽元素的坐标(event.offsetX,event.offsetY)的差来计算被拖拽元素的坐标值。关于如何利用鼠标事件实现。

Yunjinismine的博客 448

智能解决装箱问题:使用优化算法实现高效包装

装箱问题(Bin Packing Problem)是组合优化领域中的一个经典问题,主要涉及如何将一系列对象高效地装入有限数量的容器(或“箱”)中,同时满足特定的约束条件。这个问题的目标是最小化所需使用的箱子数量或者最大化箱子的装载效率,以减少空间或资源的浪费。

MindOpt_003的博客 5548

JavaScript鼠标事件

contextmenu :鼠标右键点击元素时触发(常用于禁止默认右键菜单)。- mouseout :鼠标离开元素或进入其子元素时触发(会冒泡)。- mouseover :鼠标进入元素或其子元素时触发(会冒泡)。- mouseenter :鼠标进入元素范围时触发(不冒泡)。- mouseleave :鼠标离开元素范围时触发(不冒泡)。- click :鼠标左键点击元素时触发(包括按下并释放)。- mouseup :鼠标按下的键在元素上释放时触发。例:按下鼠标开始拖拽元素。

Sakura_owo_的博客 264

从PHY芯片看工业网络精准时钟:IEEE 1588v2(PTP)协议实现与选型指南

本文深入解析了工业网络中IEEE 1588v2(PTP)协议的实现与PHY芯片选型要点。通过对比KG7101、RTL8211F等芯片的关键参数,揭示硬件时间戳对纳秒级时钟同步的决定性作用,并提供PTP网络设计中的拓扑布局与配置优化技巧,助力工业自动化场景实现精准时间同步。

weixin_42628688的博客 502

MTK平台WiFi学习--Wi-Fi 连线/断线问题初步分析

摘要:本文详细介绍了MTK平台WiFi连接问题的日志分析方法。文章首先阐述了WiFi连接的标准流程,包括指令接收、BSSID选择、信道分配、认证关联、四次握手和DHCP获取等关键步骤。针对常见故障场景,如选网失败、信道申请失败、认证关联失败、四次握手失败等,提供了具体的日志分析方法和排查思路,包括识别关键日志、分析状态码、结合固件日志和抓包数据等。文章还特别强调了不同故障场景下需要收集的日志类型和分析要点,为WiFi连接问题的定位提供了一套系统化的解决方案。

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 1591

js鼠标拖拽元素在页面随意移动(vue)

js鼠标拖拽元素在页面随意移动(vue)

m0_58996253的博客 607

VSCode PlantUML 插件超详细教程:从安装配置到实战绘图全流程

VSCode PlantUML 插件超详细教程:从安装配置到实战绘图全流程

weixin_69237381的博客 911

原生JS---实现可拖拽静态框=>案例一:

功能分析 拖动模态框需求分析:点击登录,会弹出一个页面,里面可以输入内容,并且出现背景颜色(遮挡层),当点击关闭 登录框和遮挡层背景颜色全部消失,并且这个登录框可以实现拖拽效果 案例分析 1.点击弹出层,静态模块和遮挡层会显示出来display:none 2.点击关闭,登录和遮挡层同时消失 代码如下 HTML代码 <div class="inputeGitter"> <div class="login-header"> <a id="link"

weixin_45729502的博客 440

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

如何实现原生 JS 的拖拽效果

最开始写这个解锁效果的时候,其实也查阅了很多教程,大部分都是直接教你如何使用H5draggble这个标签去实现的,但是我就在想H5之前人们是如何使用这个拖拽的呢?于是就自己去思考和动手尝试,最终才有了这篇文章。随之几天我也会重新更新一篇使用draggable实现拖拽效果的文章,还是会秉持着通俗易懂的语言来和你一起学习这个知识点。与君共勉才是我写作的真正目的。赠人玫瑰手有余香~🌹。

2401_83384536的博客 2445

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

原生JS拖拽改变元素大小

原生JS使用拖拽改变元素的大小 JS运动,JS动画,JS拖拽。 我们在之前了解过拖拽的原理,其实利用这个原理我们能够实现很多效果。今天就来介绍一下,利用拖拽方法来改变元素的大小。 这个效果其实非常常见,比如说我们可以将鼠标放在浏览器的边边上,然后浏览器光标就会变成可以拖拽的样子,我们可以往左或往右拖拽。我们来实现这个效果。 原理: 先看一张图: 鼠标只能放在左右的绿色框...

哈哈哈 2302

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

html实现鼠标拖拽按钮,JS实现鼠标按下拖拽效果

原生js实现鼠标按下拖拽效果,供大家参考,具体内容如下鼠标拖动body {margin: 0;}div {width: 200px;height: 200px;position: absolute;background-color: pink;}//定义变量储存div的宽高var obj_w, obj_h;//定义一个变量判断是否执行移动函数var mousedown = false;//鼠标按下...

weixin_35057850的博客 626

JavaScript高级手记(原生拖拽效果)

JavaScript高级手记(原生拖拽效果) HTML代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style>

小明的博客 146

如何用原生 JS 实现拖拽效果

大厂技术高级前端Node进阶点击上方程序员成长指北,关注公众号回复1,加入高级Node交流群前言: 关于“拖拽”,其实是一个老生常谈的需求了,并且还是一个非常经典的面试题。之前在项目中拖拽的场景都是直接使用轮子,虽然很快就能完成设计需求,但是这个的原理一直都是我十分想去深入了解的一部分。正好在今天的项目中再一次碰到了这个需求,我觉得是时候去探索一下它了。tips: 本文不会使用 Drag...

程序员成长指北 952

实现横向进度条(可拖拽)

横向进度条的实现(可拖拽) 横向进度条是使用挺广的,比如音乐播放器的进度条、上传下载、加载的时候也会用到横向进度条, 下面是播放器的效果图 我就以上面的进度条为例来实现横向的进度条。首先,需要介绍一下H5的新标签progress, progress 语法 <progress value="22" max="100"></progress> 属性 值 描述 value Number 已完成的任务 max Number 总任务 注意 Internet Ex

weixin_43348064的博客 3373

antd modal 拖动_react + 原生JS实现弹框拖拽解决方案

前言项目github地址最近项目需要实现一个弹框拖拽的功能,本来多快好省的方案就是使用antd的弹框,再配合gayhub上找的拖拽插件来实现。但过程中遇到一些麻烦,而且用别的东西一时爽,要实现个性化或者改一些东西,需要看别人的源码,会极其的麻烦。这时,固执的程序员就会抛下一切,全程自己开发,比如我。正所谓求人不如求己,自己动手,丰衣足食。自己开发,时间可能会多花一些,但收益也是有目共睹的:1.风险...

weixin_32715971的博客 1066

js 拖动原理

拖拽功能 一、拖拽的流程动作 ①鼠标按下 ②鼠标移动 ③鼠标松开 二、拖拽流程中对应的JS事件 鼠标按下会触发onmousedown事件 obj.onmousedown = function(e) { //.......... } 鼠标滑动会触发onmousemove事件 obj.onmousemove = function(e) { //...... } 鼠标松开会触发onmouseup事件 obj.onmouseup = function(

前端菜鸟 1102

JavaScript 拖放(拖拽、拖动)层效果(程序原理+深度分析)

JavaScript 拖放(拖拽、拖动)层效果(程序原理+深度分析) 拖放效果,也叫拖拽,学名Drag-and-drop ,是最常见的js特效之一。 如果忽略很多细节,实现起来很简单,但往往细节才是难点所在。 这个程序的原型是在做图片切割效果的时候做出来的,那时参考了好几个同类的效果,跟muxrwc和BlueDestiny学习了不少东西。 虽然...

weixin_30784501的博客 164

JS 实现「拖拽功能」没那么难!3 步搞定,附完整代码和原理

很多开发者觉得实现拖拽需要复杂的逻辑,但实际上,只要掌握核心原理,用原生 JavaScript 实现拖拽功能只需 3 个关键步骤。通过本文介绍的 3 个步骤 —— 初始化元素、记录初始数据、更新位置 —— 即可快速实现基础拖拽功能,再结合扩展优化,能满足更复杂的交互需求。需要注意的是,为了避免拖拽过程中出现元素 “抖动” 或 “偏移”,必须精确计算鼠标在元素内的初始点击位置(即 “偏移量”)。例如,用户点击元素左上角和点击元素中间时,元素跟随移动的基准点不同,若忽略偏移量,会导致鼠标与元素位置出现偏差。

2509_93051135的博客 741

3D 照片墙

今天又看了直播课,原生js做的照片墙,主要使用的transtion和transfrom,感觉还是很考验的个人对于css的理解,至于js部分还是比较见到的,就使用了一个拖拽的功能。 拖拽原理: 距离不变,三个事件: onmousedown存储距离,onmousemove根据距离计算div最新位置、onmouseup取消拖拽。 这个是一个简单的div的拖拽,HTML部分和css部分都没有什么,一个d...

W_mizi的博客 1842

构建 Crossplane Composition Function:开发、打包与 CI 的黄金路径实践指南

Composition Function 是 Crossplane 提供的一种用通用编程语言(GPL)编写复合资源(XR)编排逻辑的扩展方式。本文基于 [design/one-pager-composition-function-build-tooling.md](https://link.gitcode.com/i/34ce81d255628f0a7cf1adbbb1661229) 这篇设计文档

gitblog_00087的博客 424
上一篇: HTML5 web workers
下一篇: 原生JS实现摩擦运动效果
寒江独
博客等级 码龄16年 195粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值