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>

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

原生JS 实现页面元素的拖动 拖拽相关推荐

  1. draggable禁止拖动_通过 JS 实现简单的拖拽功能并且可以在特定元素上禁止拖拽...

    前言 关于讲解 JS 的拖拽功能的文章数不胜数,我确实没有必要大费周章再写一篇重复的文章来吸引眼球.本文的重点是讲解如何在某些特定的元素上禁止拖拽.这是我在编写插件时遇到的问题,其实很多插件的拖拽功能 ...

  2. 原生js——无法获取元素高度的的问题

    原生js--无法获取元素高度的的问题 今天遇到了xxx.style.width无法获取元素宽度的问题,原来一直没有注意到这个小细节: 1)如果width:150px:是写在 css 样式表(外链式)里 ...

  3. 原生js获取html元素高度,原生JS获取元素宽高实践详解

    开篇的话 任何不是亲身实践中求得的知识,都不是属于你的. 任何求得的知识不去时常温习运用,也不是属于你的. 记录由来 在做个上拉广告功能中遇到了一个"理所当然"觉得对的用法,慢慢才 ...

  4. js下载文件,javascript下载文件,FileSaver.js,页面元素保存成文件

    js下载文件,javascript下载文件,FileSaver.js,页面元素保存成文件 ================================ ©Copyright 蕃薯耀 2020-07 ...

  5. 原生js firstChild 获取元素的第一个节点兼容问题(需求获取元素节点)

    原生js firstChild 获取元素的第一个节点问题 firstChild 获取当前元素节点下的第一个子节点. 获取到的子节点可能是元素节点,但编程中更可能是注释节点或文本节点. 没有子节点则返回 ...

  6. 【JS案例】:实现盒子拖拽功能

    JS小案例:实现盒子拖拽功能 HTML部分: <div id="box"></div> CSS部分: #box{width: 100px;height: 1 ...

  7. nw.js FrameLess Window下的窗口拖拽与窗口大小控制

    nw.js FrameLess Window下的窗口拖拽与窗口大小控制 很多时候,我们觉得系统的Frame框很难看,于是想自定义. 自定义Frame的第一步是在package.config文件中将fr ...

  8. highchart的draggable-points.js依赖实现图表的动态拖拽操作

    highchart的draggable-points.js依赖实现图表的动态拖拽操作 需求 实现 总结 需求 实现一个曲线图,能够通过鼠标去拖拽点,来进行修改图表 实现 例子基于vue来实现,如果是j ...

  9. 移动html触摸效果,JS实现移动端触屏拖拽功能

    2.css 3.js = maxW) { oLeft = maxW; } if(oTop < 0) { oTop = 0; } else if(oTop >= maxH) { oTop = ...

最新文章

  1. 虚拟私有云网络VPC
  2. github 删除分支_Github新手入门指南
  3. OpenCV C++ 04 - Change Brightness
  4. 剑指offer 旋转数组的最小数字
  5. Linux打开bashrc权限不够,bash-4.2$ bash: /home/test/.bashrc: 权限不够
  6. 游戏服务器维护重启,游戏服务器需要定期重启吗
  7. 宏、函数、宏和函数的区别
  8. Unity学习笔记:unity脚本常用API
  9. 《Spring》AOP实现原理
  10. lt;一 SAP ABAP 将数字转换成本地语言(中文、英文)大写
  11. 【Magicavoxel简易入门教程】(二) 第二章 · 自制一个NPC导出模型优化工具使用(附下载)
  12. Shopee怎么发货?虾皮无货源怎么发货?
  13. 音乐生毕业论文有什么好的选题?
  14. 算法4 随书 IDE:DrJava 在 Win10 下高分屏字体太小问题解决
  15. Win11 Excel文件变成白板图标怎么解决?
  16. Android可触摸圆形进度条,Android 可滚动圆形进度条 滑块和进度在进度条上面跟着滚动...
  17. 关于GA、SNAPSHOT等版本号的意义
  18. 详解Unity中的粒子系统Particle System (一)
  19. 关于Git中fetch和pull区别为
  20. 用 Python 写个计算器

热门文章

  1. 软件工程网络工程第二次训练(AC代码和详细解释)(C语言描述)
  2. Android 集成facebook 登录和分享
  3. Congfu Xu's HomePage
  4. android room详解
  5. 怎样在JavaScript添加图片
  6. ArcEngine ISymbol效果预览
  7. python爬虫之十_scrapy框架进阶
  8. wb在计算机知识里是什么意思,计算机二级考试内容是什么?
  9. 如何找实习工作?怎么准备?
  10. 一款 Material Design 风格的妹子福利 App.