原生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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SchedulerFactoryBean初始化监听

    SchedulerFactoryBean初始化监听SchedulerFactoryBean初始化监听今天碰到一个问题,使用的是Quartz动态控制定时器的运行,功能已经完善,但是每次上线定时项目的时候,总要重启,一重启,所有定时任务自动就停止了,就会跟数据库对应的定时器状态不一致,在网上找了半天,找到了关于SchedulerFactoryBean初始化监听的东西,网上的文章大部分是SchedulerFactoryBean初始化解析,全部去研究…

    2022年5月24日
    52
  • go lang的激活码2021(最新序列号破解)

    go lang的激活码2021(最新序列号破解),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    40
  • getmethod方法什么意思_getstring方法

    getmethod方法什么意思_getstring方法getMethod方法要注意的地方:类对象.getMethod(mName,HttpServletRequest.class,HttpServletResponse.class);第一个参数是mName“方法名称”第二个参数是“方法参数的类对象”//这个就是为什么他是.class的原因,为什么参数是类对象?因为这个是Java规定的举个例子  这是一个抽取出的通用的servlet(页面请求经过的第…

    2022年9月15日
    0
  • 2021-02-04-scrapy爬虫案例1:爬取博客园新闻版块详情页-基础入门篇[通俗易懂]

    2021-02-04-scrapy爬虫案例1:爬取博客园新闻版块详情页-基础入门篇[通俗易懂]作者:Barranzi_注:本文所有代码、案例测试环境:1.Linux–系统版本:Ubuntu20.04LTS2.windows–系统版本:WIN1064位家庭版所需第三方库安装pillowpipinstallpillow-ihttps://pypi.douban.com/simplemysqlclientpipinstallmysqlclient-ihttps://pypi.douban.com/simple新建scrapy项目

    2022年6月26日
    22
  • Ajax获取 Request 对象

    Ajax获取 Request 对象获取Request对象有了上面的基础知识后,我们来看看一些具体的例子。XMLHttpRequest 是Ajax应用程序的核心,而且对很多读者来说可能还比较陌生,我们就从这里开始吧。从 清单1 可以看出,创建和使用这个对象非常简单,不是吗?等一等。还记得几年前的那些讨厌的浏览器战争吗?没有一样东西在不同的浏览器上得到同样的结果。不管您是否相信,这些战争仍然在继续,虽

    2022年5月2日
    45
  • PAC模式和全局模式「建议收藏」

    PAC模式和全局模式「建议收藏」PAC模式和全局模式,两种模式优缺点如下:【PAC模式】也就是智能分流模式,根据规则去匹配你访问的网站,仅加速国外网站,国内网站不受影响,非常智能;优点:节省流量,国内网站依旧走本地网络,速度快,绝大部分国外网站都走代理,速度也快。缺点:少部分国外网站不走代理,无法起到加速效果,甚至无法访问(解决方案:自己编辑PAC规则列表,将不走代理的国外网址加入进去,或者直接选择全局模式)。【全局模式】国内、国外所有网站都走代理。优点:可访问全球所有网站。缺点:所有网站都走代理,访问国内网站速度

    2022年10月19日
    0

发表回复

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

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