原生js拖拽事件

关于原生JavaScript实现DOM拖拽事件(元素拖拽) 文章目录问题:问题分析:需要理解(重点):解决方案:代码:思考:方向: 问题: 在html中创建多个元素,要求能用鼠标点下进行平移,松开固定位置。类似于电脑桌面图标的平移。 问题分析: 首先,类比于电脑桌面的图标拖拽平移,鼠标按下时进入事件,记录鼠标相对元素位置,然后鼠标移动,动态改变元素定位,最后鼠标松开,位置不再改变。 用到绑定的事件有:onmousedown,onmousemove,onmouseup。 值得注意的是:分别对哪个元素绑定相应的事件。 鼠标按下,应该是在元素中按下,这个onmoused 阅读详情

实现思路:
拖拽的基本原理就是根据鼠标的移动来移动被拖拽的元素。鼠标的移动也就是x、y坐标的变化;元素的移动就是style.position的 top和left的改变。这时需要三个事件。
1.onmousedown 鼠标按下事件;

2,onmousemove 鼠标移动事件;

3.onmouseup 鼠标抬起事件;

具体代码

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>拖拽事件</title>
	<style>
       
*{
  	margin: 0;
  	padding: 0;
  	list-style: none;
  }

#box{
   width: 100px;
   height: 100px;
   background: black;
   position: absolute;
}

	</style>
</head>
<body>
   <div id="box"></div>
</body>
<script>

    box.onmousedown=function(e){
        var  e = e || event; //获取event对象
        var  X= e.clientX-box.offsetLeft;  // 计算鼠标按下的时候到盒子的边界左边界距离;
        var  Y =e.clientY-box.offsetTop;// 计算鼠标按下的时候到盒子的边界上边界距离;
        document.onmousemove=function(e){
            var e = e || event;
            var moveX= e.clientX-X;    // 计算盒子被移动后到浏览器左边界的距离
            var moveY = e.clientY-Y;   // 计算盒子被移动后到浏览器上边界的距离
            var winX = document.documentElement.clientWidth;  //可见窗口的宽
            var winY = document.documentElement.clientHeight; // 可见窗口的高;
            var maxW = winX-box.offsetWidth;  //盒子可移动的最大宽度;
            var maxH = winY-box.offsetHeight  //盒子可移动的最大高度;

                if(moveX<0){
                    moveX=0;        //如果盒子距离左边界的距离小于0时,说明盒子超出了左边界,这时我们让这个距离等于0,
                                      使盒子不超出左边界,以下同理;
                }
                if(moveY<0){
                    moveY=0;
                }
                if(moveX>maxW){
                    moveX= maxW
                }
                if(moveY>maxH){
                    moveY=maxH
                }
                box.style.left = moveX+"px";  //设置被移动后左边界的距离
                box.style.top = moveY+"px";   //设置被移动后上边界的距离

        }
    }
    document.onmouseup=function(){
        document.onmousemove = null;    //清空被移动的函数
    }


</script>
</html>
原生JavaScript拖拽实现:从事件原理到可访问DOM操作 拖拽交互是前端开发中的基础但易错功能,其本质是浏览器原生Drag & Drop API驱动的三阶段事件流(dragstart→dragover→drop)。理解event.dataTransfer的数据传递机制、preventDefault()在dragover中的强制必要性,以及aria-grabbed等可访问性属性的动态管理,是构建健壮拖拽逻辑的核心。该技术无需框架依赖,具备极致轻量(<4KB)、调试透明、样式自由和兼容清晰等工程优势,广泛适用于后台管理系统排序、低代码平台组件编排、仪表盘布局调整等场景 阅读详情

相关推荐

原生JS中的拖拽事件兼容性问题

写个小Demo,分享一下使用原生JS实现拖拽时的兼容性问题如何解决?代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>原生JS中的拖拽事件兼.........

分享前端工程化、AI 应用、Agent 开发与大模型实践! 922

Js中六种拖拽(拉)事件(drag 和 drop)

拖拽事件(待更新) 前言(各个浏览器的兼容性) 1.兼容性如下图: 一、相关的五个事件api如下: 拖拽流程说明: 1.dragstart事件 2.dragenter事件 3.dragover事件 4.drop事件(必须要dragover事件触发) 5.dragend事件 MDN详细说明: 链接如下 如下图所示: 二、相关的属性 1.draggable(让元素可拖拽) draggable解释说明: 使用代码如下: 如下图所示: 2.dataTransfer(对应的拖拽媒介) 解释说明(通用方法):

weixin_46022934的博客 1万+

从零构建:如何用MATLAB和SDR硬件搭建你的第一个OFDM卫星通信原型系统

本文详细介绍了如何利用MATLAB和SDR硬件从零构建OFDM卫星通信原型系统。通过核心组件选型、开发环境配置、OFDM算法实现到系统集成与优化的完整流程,帮助通信工程学生和DIY爱好者快速掌握软件无线电技术在卫星通信中的应用。特别推荐使用HackRF One和MATLAB工具箱实现高性价比的OFDM系统验证。

pz890123456的博客 378

案例一:javascript的拖拽事件(drag,drop)

一、拖拽效果如下步骤所示 1.正常的排序如下: 2.拖拽列表1与列表2互换位置 常按的效果如下图: 切换位置后的效果如下图: 二、具体代码如下 1.HTML部分代码块 2.javascript部分代码块 3.js代码说明: 总结:下面的🔗是跳转到案例二(关于 表格的拖拽的效果)

weixin_46022934的博客 4911

用workbuddy自定义Skill:手把手搭建AI炒股分析助手

AI Agent正成为个人投资研究的重要工具,而Skill作为行为规范,能让AI输出保持稳定与专业。在AI Agent应用中,很多人分不清Skill与Agent的区别:Agent负责目标拆解与执行,Skill则固化分析流程与输出模板。借助本地工作台workbuddy,用户可自定义Skill,实现从市场环境检查到财务排雷的五段式分析。通过调低温度参数、设定数据验证规则,该方案能有效避免大模型凭空编造数据,帮助个人投资者快速完成基本面体检、资金面观察与风险清单生成。本文基于一套可直接套用的配置与一个月实测,展示

weixin_29038537的博客 527

3线SWD接线终极指南:用Jlink调试非3.3V设备的5个关键细节

本文详细解析了使用Jlink调试非3.3V设备时,3线SWD接线的5个关键细节。核心在于正确理解并连接Vref引脚以实现电压适配,避免供电冲突,并掌握精简接线法与固件修复技巧。文章以STM32F205等芯片为例,指导开发者安全、高效地进行混合电压调试。

e4f5g6h7的博客 437

JS 拖拽事件

4. 将元素拖拽放置在容器中(在容器中松开鼠标),在在容器中绑定一个ondrop 事件中,同样需要调用 e.preventDefault() 方法来阻止默认行为。2.移动鼠标(monusemove),获取移动元素中鼠标的clientX、clientY 减去上边求出的鼠标到元素边界的距离 ,求出元素移动top、left值,赋给元素。下面有2个元素,判断2个元素是否碰撞,如果碰撞的情况非常多,我们可以考虑没碰撞的情况,下面满足任意一种情况就是没碰撞的。3.松开鼠标(monuseup),将鼠标移动事件清除清除。

本郡主是喵 1811

【项目实战】自动化测试软件VectorCAST介绍

VectorCAST是一款先进的自动化测试软件。VectorCAST是一款功能强大、易于使用的自动化测试软件。VectorCAST适用于各种嵌入式系统的测试。VectorCAST为嵌入式系统的测试提供了一种高效、可靠的解决方案。VectorCAST提供了一整套完整的测试工具,包括测试管理、代码覆盖、缺陷定位、报告生成等,以帮助开发人员提高测试效率,确保软件质量。VectorCAST支持。

奶爸的编程之路,也就一周冷个三天 2011

javascript学习之拖拉事件

所有拖拉事件的实例都有一个属性,用来读写需要传递的数据。这个属性的值是一个接口的实例。浏览器原生提供一个构造函数,用来生成实例对象。构造函数不接受参数。拖拉的数据分成两方面:数据的种类(又称格式)和数据的值。数据的种类是一个 MIME 字符串(比如text/plainimage/jpeg),数据的值是一个字符串。一般来说,如果拖拉一段文本,则数据默认就是那段文本;如果拖拉一个链接,则数据默认就是链接的 URL。拖拉事件开始时,开发者可以提供数据类型和数据值。拖拉过程中,开发者通过。

白话机器学习 1854

家庭弱电最实用的功能,网线面板如何接线

按照规范,我国宽带入户线按B接法,即568B标准,从后面看,从左到右:1橙白,2橙,3绿白,4蓝,5蓝白,6绿,7棕白,8棕,即和水晶头的接法一致。做水晶头的时候,要注意排好线序,把8根线的头剪齐,留下大约1.8公分,插入水晶头的时候,水晶头要尾巴向下,把线插到水晶头的底端,用网线钳子夹紧。具体是:第1脚——橙白、第2脚——橙色、第3脚——绿白、第4脚——蓝色、第5脚——蓝白、第6脚——绿色、第7脚——棕白、第8脚——棕色,除了四根带颜色的线橙、绿、蓝、棕外,每一根白线上都有线标橙、绿、蓝、棕。

qq_43416206的博客 1674

数据结构课程设计--基于知识图谱的中医食疗数据管理与应用

【代码】数据结构课程设计--基于知识图谱的中医食疗数据管理与应用。

M_inherit的博客 567

原生JS的drag事件实现元素拖拽的bug

项目场景: 最近做Uniapp项目,从服务器请求json数据时,console.log打印出的对象中有部分数据字段缺失 问题描述: 这是服务器的数据,总共包含六个字段 这个是控制台打印出的结果,少两个字段不说,连sex字段都错了 下面是代码:下拉刷新请求网络数据,而两个url都是一样(我直接复制的) onPullDownRefresh() { uni.request({ url:this.url, success:(res)=> { console.log(re

weixin_51116314的博客 2625

背靠背VSC直流母线电压控制与同步发电机并网发散问题:原理、分析与解决方案

背靠背VSC直流母线电压控制与同步发电机并网发散问题分析 摘要: 本文研究了背靠背VSC系统在整流侧由理想三相电源切换为同步发电机时出现的直流母线电压振荡和发散问题。通过理论分析发现,锁相环同步失稳、等效阻抗失配和直流母线电容参数失配是导致系统失稳的关键因素。当整流侧接入同步发电机后,系统形成正反馈振荡回路,同时等效电感增大导致电流环响应速度降低,直流侧电容容量不足无法吸收发电机功率波动。文章提出了从跟网型控制到构网型VSG控制的完整升级方案,包含详细的MATLAB/Simulink建模和控制算法实现,并通

huanghm88的专栏 122

原生Js拖拽事件

原生Js拖拽事件 开发工具与关键技术:DW 作者:Mr_恺 撰写时间:2019.05.12 在日常生活中,我们经常上网浏览点击某个东西它就跳出一个窗体,并且可以拖拽它动来动去,但你们有没有想过这个是怎样完成的呢?其实实现这个功能是有很多种方法,现在我用一个原生Js来做为一个例子。 先来Html布局: Css样式: 布局效果:就把它当作一个窗体 Js就是实现拖拽的关键:实现原生js拖拽事件是通...

weixin_44546509的博客 396

基于SAGE算法的宽带信道参数估计算法的MATLAB仿真

本文将介绍如何使用MATLAB进行SAGE算法的仿真,以便更好地理解和应用该算法。SAGE算法是一种基于最大期望(Expectation-Maximization)方法的迭代估计算法,用于估计未知的参数。在宽带信道参数估计中,SAGE算法通过迭代优化来估计信道的传输函数。总结起来,本文介绍了如何使用MATLAB进行基于SAGE算法的宽带信道参数提取算法的仿真。通过以上步骤,我们可以得到估计的信道响应,并与真实信道响应进行比较。此外,SAGE算法还可以与其他信道估计算法相结合,以提高估计的准确性和性能。

CodeRoarX的博客 1075

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

vuejs 原生JS 拖拽事件案例

虽然 但是 可能 也许 大概 现在我们都会使用第三方库element antdesign vant 等组件库是吧。但是呢,你去面试 或者说 产品提了个什么你没听过的需求,这个时候你不知道你能不能实现,或者说实现的难易度无法评估,无法准确的评估计划时间。这个时候,欸欸欸,你就该打开优快云 打开你的关注 找到me,翻阅一下我的案例合集了!提示:以下是本篇文章正文内容,下面案例可供参考。

ycycycyc1的博客 1027

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

如何使用原生JS的拖拽事件,实现一对一在Vue中

到这你需要拖拽的页面就写好了。接下来就是接受数据的页面。dragover说明。

qq_70005974的博客 454

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【原生JavaScript案例】原生JS封装拖拽与双击事件分离右键自定义菜单函数

【原生JavaScript案例】原生JS封装拖拽与双击事件分离右键自定义菜单函数

马云 603

【JavaScript】原生js事件中事件绑定、磁性吸附,以及拖拽选中文字的结决方案

事件绑定 <script> window.onload = function () { var oDiv = document.getElementById('btn') if (oDiv.attachEvent) { //低版本的 ie oDiv.attachEvent('onclick', function () { alert(a) }) oD

Owen的博客 377

基于原生js实现的九宫格拖拽

使用原生js写的选项卡嵌套 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> * { padding: 0; margin: 0; list-style: none; } #warp { width: 80

hunter 453

原生JS实现拖拽事件

拖拽对象必须的有定位的 .app { width: 100px; height: 100px; background: red; /* margin: 20px; */ position: absolute; border: 10px solid black; cursor: move;...

weixin_44233842的博客 231

【加强版】js原生实现拖拽效果,这次没有用document的mousedown、mousemove、mouseup事件我们来点实际的(但是有个弊端:拖拽过程中鼠标会变成一个禁用符号⊘,不太友好)

//初始化需要拖拽的列 initDrags() { var arr = document.querySelectorAll(".col-9 li"); for (var i = 0, len = arr.length; i < len; i++) { var a = arr[i]; this.drag(a); } }, // js原生实现拖拽效果 drag(sel) { var t...

我驾驶汽车从不是为了从A点到达B点,我喜欢去感受汽车,与之交流,与之融为一体。 6098

根据教程写的原生js的拖拽事件

根据智能社的教程,写的demo。 主要是看网上的很多都有各种各样的bug,这是在上大学期间看的视频教程,现在拿出来在这里做个备注; 各位同行有用到的请点个赞再走 给右下角的红色区域添加拖拽事件 具体的demo如下: <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> <

GAOJINGZHEN36的博客 1万+

vue 原生js实现拖拽排序

原生js拖拽排序。

lang_lang1的博客 933

原生js的拖拽事件

&lt;!DOCTYPE html&gt; &lt;html lang="en"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;Document&lt;/title&gt; &lt;style&gt; .box{ width:200px; height:200px

hahahahahahahaha__1的博客 741
上一篇: 随机颜色的三种方法
下一篇: 常用正则表达式
document_write
博客等级 码龄8年 18粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值