一、三个事件onmousedown(鼠标按下),onmousemove(鼠标移动),onmouseup(鼠标松)
鼠标按下时

box.onmousedown = function(e) {console.log("e.clientX",box.offsetLeft);console.log("e.clientY",box.offsetTop);var e = e || window.event; //要用event这个对象来获取鼠标的位置x = e.clientX - box.offsetLeft;y = e.clientY - box.offsetTop;isDrop = true; //设为true表示可以移动
}

二、得到box盒子离左侧x和上侧的距离y

document.onmousemove = function(e) {//是否为可移动状态                                   if(isDrop) {    var e = e || window.event;                      var moveX = e.clientX - x; //得到距离左边移动距离                      var moveY = e.clientY - y; //得到距离上边移动距离//可移动最大距离var maxX = document.documentElement.clientWidth - box.offsetWidth;var maxY = document.documentElement.clientHeight - box.offsetHeight;//范围限定  当移动的距离最小时取最大  移动的距离最大时取最小//范围限定方法一/*if(moveX < 0) {moveX = 0} else if(moveX > maxX) {moveX = maxX;}if(moveY < 0) {moveY = 0;} else if(moveY > maxY) {moveY = maxY;} *///范围限定方法二 moveX=Math.min(maxX, Math.max(0,moveX));moveY=Math.min(maxY, Math.max(0,moveY));box.style.left = moveX + "px";  box.style.top = moveY + "px";          } else {return;          }}

三、鼠标移动时
为了防止鼠标移动过快事件无法正确处理所以事件绑定到document上
四、鼠标松开时
为了放置鼠标移动过快时间无法正确处理所以事件绑定到document上

五、可以这样表示范围限定

//范围限定  最小取最大  最大取最小
if(moveX < 0) {moveX= Math.max(0,moveX)//0}else if(moveX>maxX){moveX=Math.min(moveX,maxX);//maxX}if(moveY < 0) {moveY= Math.max(0,moveY) //0}else if(moveY>maxY){moveY=Math.min(moveY,maxY); //maxY}
document.onmouseup = function() {isDrop = false; //设置为false不可移动
}
 document.onmousemove
<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title></title><style>.box {position: absolute;width: 200px;height: 200px;background: red;}</style></head><body><div class="box"><p>sfsdfsdfsdfsdfsdfsf</p></div><script>var box = document.getElementsByClassName("box")[0]; //获取元素var x, y; //鼠标相对与div左边,上边的偏移var isDrop = false; //移动状态的判断鼠标按下才能移动box.onmousedown = function(e) {console.log("e.clientX",box.offsetLeft);console.log("e.clientY",box.offsetTop);var e = e || window.event; //要用event这个对象来获取鼠标的位置x = e.clientX - box.offsetLeft;y = e.clientY - box.offsetTop;isDrop = true; //设为true表示可以移动}document.onmousemove = function(e) {//是否为可移动状态                                   if(isDrop) {    var e = e || window.event;                      var moveX = e.clientX - x; //得到距离左边移动距离                      var moveY = e.clientY - y; //得到距离上边移动距离//可移动最大距离var maxX = document.documentElement.clientWidth - box.offsetWidth;var maxY = document.documentElement.clientHeight - box.offsetHeight;//范围限定  当移动的距离最小时取最大  移动的距离最大时取最小//范围限定方法一,选其中一种/*if(moveX < 0) {moveX = 0} else if(moveX > maxX) {moveX = maxX;}if(moveY < 0) {moveY = 0;} else if(moveY > maxY) {moveY = maxY;} *///范围限定方法二 moveX=Math.min(maxX, Math.max(0,moveX));moveY=Math.min(maxY, Math.max(0,moveY));box.style.left = moveX + "px";  box.style.top = moveY + "px";          } else {return;          }}document.onmouseup = function() {isDrop = false; //设置为false不可移动}</script></body></html>

用JavaScript原生手写div的鼠标拖拽功能相关推荐

  1. js实现鼠标拖拽功能基本思路

    如果要设置物体拖拽,那么必须使用三个事件,并且这三个事件的使用顺序不能颠倒. onmousedown:鼠标按下事件 onmousemove:鼠标移动事件 onmouseup:鼠标抬起事件 拖拽的基本原 ...

  2. vue项目实现鼠标拖拽功能

    <divid="back"@mousedown="draggableFun($event)"></div> //e.clientX和e. ...

  3. python鼠标拖拽功能_selenium鼠标移动、拖拽、双击、长按等操作

    selenium鼠标操作靠的是ActionChains(行为链)类,前面的文章我们已经介绍过,详情可以看ActionChains类,selenium的鼠标操作就不一一举例了,本节把鼠标移动.拖拽.双击 ...

  4. Unity 鼠标拖拽功能

    继承3个处理拖拽方法的接口IBeginDragHandler, IDragHandler, IEndDragHandler /// <summary>/// 实现接口的OnBeginDra ...

  5. js简单实现鼠标拖拽功能:盒子可以跟着鼠标移动位置

    实现的原理: 根据上面的图可以算出移动后的盒子的left和top: 鼠标距离边界的值: ev.pageY - box.top ev.pageX - box.left box2.top = ev2.pa ...

  6. python鼠标拖拽功能_Python wxpython模块响应鼠标拖动事件操作示例

    本文实例讲述了Python wxpython模块响应鼠标拖动事件操作.分享给大家供大家参考,具体如下: wxpython鼠标拖动事件小案例: #coding:UTF-8 import wx app = ...

  7. python模拟拖拽文件_python 基于selenium实现鼠标拖拽功能

    1.准备html文件 首先我们需要准备一个鼠标滑动的html文件,用来演示鼠标滑动的效果,注意需要将我们的html文件放在自己的服务器上, 这样我们才能够通过selenium来进行验证.html文件如 ...

  8. 【WPF】鼠标拖拽功能DragOver和Drop

    在Winform里面实现拖入功能只要设置控件AllowDrop=true; 然后实现方法 //拖入 private void txtInputPath_DragOver(object sender, ...

  9. 3dmax java_Java3D读取3DMax模型并实现鼠标拖拽、旋转、滚轮缩放等功能

    /**-------------------------------------------------代码区--------------------------------------------- ...

最新文章

  1. 想高效办公,有什么好的多端协作平台推荐吗?
  2. andorid 全部对话框
  3. AndroidSDK下载以及配置
  4. shell排序_Python排序算法(五)希尔排序
  5. 如何为 .NET Core 3.0 中 WPF 配置依赖注入 ?
  6. Java 8 Friday Goodies:精益并发
  7. 现实世界 机器学习_公司沟通分析简介现实世界的机器学习方法
  8. lower_bound()和upper_bound()
  9. 4 PP配置-组织架构-定义MRP控制者
  10. hdoj--1716--排列2(暴力水题)
  11. java fx消息通知_如何设置对话框控件Java FX / Java 8的图标
  12. SQLServer-Error Log
  13. CCF NOI1016 计算天数
  14. 曲演杂坛--SQLCMD下执行命令失败但没有任何错误提示的坑
  15. ROS系统学习8---节点间的内存共享(初级篇)
  16. vue-symbol
  17. 计算机教学说课稿,计算机教学说课稿
  18. ajax post请求导致的跨域和浏览器兼容性问题
  19. ★平衡法则在生活中的应用
  20. 手动实践3-把握移动端字体设计的七大准则

热门文章

  1. 奇安信、深信服、启明星辰的安全红利战
  2. 惯性导航原理之姿态算法-四元数欧拉角等效转动矢量
  3. 看图自测,怎么判断自己的近视是否带有散光?
  4. 使用JavaScript制作页面效果3
  5. win10计算机升级系统,教你用电脑管家升级Win10系统?升级Win10系统的简单方法
  6. WebGL原来如此:搞懂三维坐标系变换
  7. netty获取玩家chanel_基于netty的TCP服务端如何给客户端发送消息,但是如何拿到客户端连接时的SocketChannel呢,菜鸟求助?...
  8. bO耳机软件_B站知名up主“巫师财经”宣布退出B站,B站:希望撤回,否则提起诉讼...
  9. qt QSS入门(一)
  10. 泰凌微8258入门教程 基础篇⑦——Flash结构和OTA流程