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

使用javaScript实现鼠标拖拽事件 本文实例为大家分享了js实现鼠标拖拽事件的具体代码,供大家参考,具体内容如下 <html> <head> <meta charset="UTF-8"> <title></title> <style> body{ margin: 0; padding: 0; } div{ position: absolute; top: 200px;/*div的y轴*/ left: 150px;/*div的x轴*/ width: 300px; 立即下载

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中不起效果。所有事件包含在一个函数里面,再函数里面再进行事件的执行。


《八》:玩家位置同步(玩家防碰撞) 在VR大空间体验中,由于玩家佩戴头显设备无法直接观察彼此位置,容易发生碰撞。因此,需要将玩家的实时位置信息绘制在虚拟空间中,实现位置可视化。通过获取头显的位置和旋转角度等数据,可以推算出玩家的移动状态和位置。使用可序列化的玩家结构体,通过UDP将玩家数据发送到服务器,服务器接收并反序列化数据后,同步所有玩家的最新信息至各客户端。客户端根据接收到的数据渲染虚拟人物模型,实现动态位置更新。这一过程涉及数据序列化、反序列化、网络通信和实时渲染等技术,确保玩家在虚拟空间中的位置同步和可视化。 阅读详情

相关推荐

2025小红书跳转卡片实战指南:从零搭建独立后台与自动化发卡系统

本文提供了一份2025年小红书跳转卡片的实战搭建指南,详细解析了独立后台系统的核心架构与自动化发卡流程。文章从零开始,手把手教你使用Node.js、Vue.js等技术栈构建包含后台管理、用户制卡中心与前端交互的完整系统,旨在帮助运营者实现合规引流,并掌握数据自主权与自动化运营能力。

weixin_29234423的博客 518

JavaScript实现鼠标拖拽效果

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

Yunjinismine的博客 448

【立创开源】太阳能板充电方案单节3.7v锂电池充电

一直对太阳能板感兴趣,老是感觉充电好麻烦,要是放在那里就可以自己充电多好,所以尝试做了一个太阳能充电板。因为这几天都是阴天,所以测试效果不太好,但是下雨天也是能充电的,但是基本只能维持电量不掉,电压差不多4.2v以上,电流只有2mA。中午出太阳的时候,隔着玻璃放在太阳下测试,电流有12mA以上。能充起一点点电。等大晴天看一看能不能达到卖家说50mA。┗( T﹏T )┛感觉达不到。这个东西只能当一个玩具(;′⌒`)。不过如果汽车上一些行车记录仪加一个这个,汽车经常在太阳下停车,可能再也不用充电了。

贾saisai的博客 1万+

JavaScript鼠标事件

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

Sakura_owo_的博客 264

KV Cache 详解:新手也能理解的 LLM 推理加速技巧

(Autoregressive)生成的,即每次生成一个 token,然后将其作为输入继续生成下一个 token。:如果序列太长,超过了 KV Cache 的存储限制,就需要丢弃最早的 tokens(类似滑动窗口)。时,每次只会生成一个新 token,然后再把这个 token 作为输入继续生成下一个 token。,只缓存计算过的 K,VK, V,每次只计算新 token 的 K,VK, V,从而提升推理效率。:如果输入的 prompt 发生变化,之前的 KV Cache 不能复用,必须重新计算。

Harry的博客 7364

从0开始部署基础的AlwaysOn

在这个快餐文化盛行的时代,应该没多少人真的会沉下心来看理论和具体步骤,加上我自己也需要一篇可以扩展的快速搭建环境的指引,所以特别写了这篇文章。 我们在这里要做的事情有以下几个:安装环境。包括虚拟机和网络配置等。安装Windows域、配置必要的账号密码及功能。搭建域环境并进行配置。安装配置Windows Server Failover Cluster(WSFC)。安装SQL Server。配置Alw

MVP黄钊吉(發糞塗牆) 7569

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

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

m0_58996253的博客 607

VS2015+C++实战:手把手教你用海康MVS里的Demo搞定多相机同步采图与保存

本文详细解析了在VS2015+C++环境下,利用海康威视MVS工业相机SDK实现多相机同步采图与保存的全流程。从环境准备、SDK选择到多相机初始化、同步采图方案,再到异常处理与性能优化,提供了实战技巧和代码示例,帮助开发者快速掌握工业相机二次开发的核心技术。

weixin_29170327的博客 281

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

DeerFlow 在 Windows 上的安装与启动详细步骤

DeerFlow Windows安装与启动指南 DeerFlow是基于LangGraph的AI Agent系统,包含后端服务和前端界面。后端安装需Python 3.12+,创建虚拟环境后安装依赖,需注意解决langgraph版本冲突问题(推荐1.0.8版本)。配置文件中需设置模型参数(如本地Qwen3-32B-AWQ模型)和sandbox配置。启动分为两步:LangGraph Server(端口2024)和Backend Gateway(端口8001)。前端要求Node.js 22+和pnpm,配置.env

笨小孩 582

【教程4>第2章>第19节】 GMSK解调系统的FPGA开发与matlab对比验证

MSK(Minimum Shift Keying,最小频移键控)和GMSK(Gaussian Minimum Shift Keying,高斯最小频移键控)都是数字调制技术,主要用于无线通信系统中将数字信号转换为模拟信号进行传输。它们都是连续相位移键控(Continuous Phase Shift Keying, CPK)的一种形式,意味着相邻码元之间没有相位跳变的突变,而是连续过渡,这有助于减少信号带宽和降低邻道干扰。GMSK的解调过程与MSK类似,我们这里还是采用和MSK解调一样的1bit解调方法。

FPGA/MATLAB学习教程/源码/项目合作开发 1221

js中的拖拽

拖拽 dom javascript

betterangela的博客 3952

CANbus收发器ADM3053BRWZ-REEL7应用原理图设计

ADM3053 在 CAN 协议控制器与物理层总线之间创建一个 完全隔离的接口。该器件具有限流和热关断特性,可防止输出短路。额定温 度范围为工业温度范围,提供 20 引脚、宽体 SOIC 封装。该器件采用 5 V 单电源供电, 提供完全隔离的 CAN 解决方案。ADM3053 是一款隔离式控制器区域网络 (CAN) 物理层收 发器,集成隔离 DC/DC 转换器,符合 ISO 11898 标准。该器件采用 ADI 公司的。Coupler® 技术,将双通道隔离器、 CAN 收发器和 ADI 公司的。

zhusl6688的博客 1239

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

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

weixin_45729502的博客 440

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

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

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

2401_83384536的博客 2445

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

原生JS拖拽改变元素大小

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

哈哈哈 2302

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

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、付费专栏及课程。

余额充值