原生JS 实现页面元素的拖动 拖拽

原生JS 实现页面元素的拖动 拖拽原生JS实现页面元素的拖拽1.

大家好,又见面了,我是你们的朋友全栈君。

1 . 实现原理

要实现页面元素的拖动,其原理就是根据鼠标的移动实时的更改元素的left 和 top值(当然元素肯定是要做绝对定位的),那么就达到我们要的效果了呀!

鼠标的位置是可以通过 e.clientX 获取的,通过获取的值减去鼠标和目标元素之间的偏移量,就是我们的 left 值了呗, top值是同理的,不过记住要设置界限哟,不然跑出去了。

代码我尽量写了注释,如果还是有什么不懂的,直接评论就好了,我会尽快回复的。

2 . 实例展示

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style> * { 
     padding: 0; margin: 0; } .move { 
     height: 100px; width: 100px; background: #41ffce; position: absolute; top: 50px; left: 50px; } .move:hover{ 
     cursor: pointer; } </style>
</head>

<body>
    <div class="move"></div>

    <script> window.onload = function () { 
     // 目标元素 var move = document.getElementsByClassName("move")[0]; // 鼠标按下 move.onmousedown = function (e) { 
     // 获取事件对象 var e_down = e || window.event; // 计算鼠标点击的位置 和 目标元素之间 的偏移量 var x = e_down.clientX - e_down.target.offsetLeft; var y = e_down.clientY - e_down.target.offsetTop; // 我们想要拖拽元素,其实就是根据鼠标的移动实时的更改元素的left 和 top值 // 鼠标的位置是可以通过e.clientX 获取的,然后减去x 不就是我们的left值了 //鼠标移动,肯定是在按住的情况下移动的嘛 document.onmousemove = function(e){ 
     var e_move = e || window.event; left_ = e_move.clientX - x; top_ = e_move.clientY - y; // 对left_和top_添加界限 if(left_ < 0){ 
     left_ = 0 }else if(left_ > document.documentElement.clientWidth - e_down.target.offsetWidth){ 
     left_ = document.documentElement.clientWidth - e_down.target.offsetWidth } if(top_ < 0){ 
     top_ = 0 }else if(top_ > document.documentElement.clientHeight - e_down.target.offsetHeight){ 
     top_ = document.documentElement.clientHeight - e_down.target.offsetHeight } // move.setAttribute("style","top:"+top_+'px'+";left:"+left_+"px") move.style.left = left_+'px'; move.style.top = top_+'px'; } // 释放鼠标 move.onmouseup = function(){ 
     document.onmousemove = null } } } </script>
</body>
</html>

希望能够帮助到大家,有什么问题可以 直接评论即可,如果不够详细的话也可以说,我会及时回复的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150641.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm报错:Process finished with exit code -1073741819 (0xC0000005)

    pycharm报错:Process finished with exit code -1073741819 (0xC0000005)这个错误是真的奇怪,网上说法居然各个都不一样,而我解决的方法也都和大家不一样。所以如果你遇到了这个问题,可以从以下几个方面找找原因,希望能帮到你。我觉得最有可能的是第六种,可以直接看第六种方法。。第一种:读取csv文件如果你读取了csv文件,请参考这个,否则直接跳过原地址:https://stackoverflow.com/questions/28447567/python-termi…

    2022年8月28日
    2
  • Android studio学习笔记:adb被系统空闲进程占用了怎么办?

    Android studio学习笔记:adb被系统空闲进程占用了怎么办?在准备run的时候,adbserver报错:UnabletoopenconnectiontoADBserver:java.io.IOException:Can’tfindadbserveronport5037,IPv4attempt:Connectionrefused:connect,IPv6attempt:Connectionrefused:connect发现端口号5037被占用了,看网上的教程都是被一般进程给占用了,可以直接taskkill掉,空出端口

    2022年10月20日
    2
  • 什么是51单片机最小系统?

    什么是51单片机最小系统?什么是单片机最小系统?说白了就是单片机能正常工作的最简单的电路。当然有些芯片自己上电就能工作,这里我们介绍的是51单片机的最小系统电路。通常51单片机的最小电路包括:单片机、晶振、复位电路。下面我们逐一介绍。一、单片机如上图所示,其各个引脚功能如下:1~8:P1对应的IO口(可编程输入输出口)。9:RST复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。10~17:P3对应的IO口。18:XTAL2晶振输出端。19:XTAL1晶振输入端。20:GND电源地。..

    2022年6月23日
    31
  • 自定义progressbar样式_样式

    自定义progressbar样式_样式android ProgressBar 样式讲解

    2022年4月21日
    52
  • crontab定时任务不执行的原因

    crontab定时任务不执行的原因我在网上找的时候发现网上主要说了这5个原因:1crond服务未启动crontab不是Linux内核的功能,而是依赖一个crond服务,这个服务可以启动当然也可以停止。如果停止了就无法执行任何定时任务了,解决的方法是打开它:crond或servicecrondstart如果提示crond命令不存在,可能被误删除了,CentOS下可以通过这个命令重新安装:yum…

    2022年7月17日
    36
  • 【技巧总结】位运算装逼指南

    【技巧总结】位运算装逼指南位算法的效率有多快我就不说,不信你可以去用10亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。判断奇偶数判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下…

    2022年6月22日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号