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


相关推荐

  • springboot项目实战视频教程_Spring揭秘

    springboot项目实战视频教程_Spring揭秘前言:花了大概一个多月的时间,debug自己录制的SpringbBoot实战历程~从菜鸟到小牛课程已经完成了!包含课时46节,涵盖知识点以及详情如下图所示。课程介绍:本课程以实际业务场景为出发点、实战撸码为主、理论概念为辅,零基础一步一个脚印讲解当前微服务项目或分布式系统下SpringBoot各种典型的应用场景及其涉及的各个核心要点!课程目的:本课程目的在于给那些需要入门Sp…

    2022年8月20日
    9
  • javascript 匿名函数_java 匿名函数

    javascript 匿名函数_java 匿名函数在JavaScript中用匿名函数(箭头函数)写出递归的方法前言今天看 Mozilla 出品的 ES6InDepth ,看到 Arrowfunctions(中文翻译),其中一段让人讶异。Usingarrowstopiercethedarkheartofcomputerscience「使用箭头来刺穿计算机的黑暗心脏」里面提到λ(lambda)表达式、阿隆佐·邱奇(Alonz…

    2022年9月28日
    2
  • springMVC+mybatis 之借助SqlSessionTemplate 实现Dao层通用写法

    springMVC+mybatis 之借助SqlSessionTemplate 实现Dao层通用写法在springMVC+mybatis框架开发时,通常我们会写多的dao,如userDao,roleDao,departDao等等,这样开发效果就很慢,不是很好,所以编写个通用dao.1.编写dao接口[java]viewplaincopypublicinterfaceDAO{/***保存对象*@paramstr*@paramobj*@retu…

    2022年5月31日
    33
  • python基础语法个人笔记_python语法规则

    python基础语法个人笔记_python语法规则python语法规范python的语法规范非常重要,简洁明了是python的特性,以下是python语法的一些说明python3的编码格式是unicode(utf-8)标识符的规则:由字母、数字

    2022年7月31日
    6
  • 高斯模糊浅析_ps高斯模糊没反应

    高斯模糊浅析_ps高斯模糊没反应所谓高斯模糊,就是指一个图像与二维高斯分布的概率密度函数做卷积。它的效果如下:是不是有点像变成了近视眼的感觉?没错,高斯模糊常常用来模拟人眼中的物体变远、变快的效果。在照片处理中,我们常常将背景施以高

    2022年8月3日
    19
  • 非主流文字生成_非主流文字转换器

    非主流文字生成_非主流文字转换器这是米奥的第01篇笔记作者|米奥来源|米奥笔记ID|miaobiji01为什么要重视排版回想一下,你一般都是在什么场景下来阅读公众号的推文?可能是窝在被窝时、坐公交地铁时、排队吃饭时、工作学习开小差时,甚至是厕所蹲坑时……在这么“将就”的环境下,我们很难高度集中我们的注意力来阅读一篇文章。所以,高颜值的排版要让用户看起来舒服、轻松,而不是花枝招展;另外,在这样的…

    2022年9月25日
    4

发表回复

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

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