js实现限定范围拖拽的示例


Posted in Javascript onOctober 26, 2020

限定范围拖拽

目录

  • 代码实例
  • 与简易拖拽的差异
  • 下载源码链接 

代码实例

* {
 padding: 0;
 margin: 0;
}
#box1 {
 width: 500px;
 height: 500px;
 background: #999;
 position: relative;
 left: 100px;
 top: 100px;
}
#box {
 width: 100px;
 height: 100px;
 background: #334;
 position: absolute;
 cursor: move;
}

<div id="box1">
<div id="box"></div>
</div>

(function () {
 var dragging = false
 var boxX, boxY, mouseX, mouseY, offsetX, offsetY
 var box = document.getElementById('box')
 var box1 = document.getElementById('box1')

 // 鼠标按下的动作
 box.onmousedown = down
 // 鼠标的移动动作
 document.onmousemove = move
 // 释放鼠标的动作
 document.onmouseup = up

 // 鼠标按下后的函数,e为事件对象
 function down(e) {
  dragging = true

  // 获取元素所在的坐标
  boxX = box.offsetLeft
  boxY = box.offsetTop

  // 获取鼠标所在的坐标
  mouseX = parseInt(getMouseXY(e).x)
  mouseY = parseInt(getMouseXY(e).y)

  // 鼠标相对元素左和上边缘的坐标
  offsetX = mouseX - boxX
  offsetY = mouseY - boxY
 }

 // 鼠标移动调用的函数
 function move(e){
  if (dragging) {
   // 获取移动后的元素的坐标
   var x = getMouseXY(e).x - offsetX
   var y = getMouseXY(e).y - offsetY

   // 计算可移动位置的大小, 保证元素不会超过可移动范围
   // 此处就是父元素的宽度减去子元素宽度
   var width = box1.clientWidth - box.offsetWidth
   var height = box1.clientHeight - box.offsetHeight

   // min方法保证不会超过右边界,max保证不会超过左边界
   x = Math.min(Math.max(0, x), width)
   y = Math.min(Math.max(0, y), height)

   // 给元素及时定位
   box.style.left = x + 'px'
   box.style.top = y + 'px'
  }
 }

 // 释放鼠标的函数
 function up(e){
  dragging = false
 }

 // 函数用于获取鼠标的位置
 function getMouseXY(e){
  var x = 0, y = 0
  e = e || window.event

  if (e.pageX) {
   x = e.pageX
   y = e.pageY
  } else {
   x = e.clientX + document.body.scrollLeft - document.body.clientLeft
   y = e.clientY + document.body.scrollTop - document.body.clientTop
  }
  return {
   x: x,
   y: y
  }
 }
})()

与简易拖拽的差异

可移动位置的改变

// 此处就是父元素的宽度减去子元素宽度
var width = box1.clientWidth - box.offsetWidth
var height = box1.clientHeight - box.offsetHeight

下载源码链接

星辉的Github

以上就是js实现限定范围拖拽的示例的详细内容,更多关于js实现限定范围拖拽的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
HTML TO JavaScript 转换
Jun 26 Javascript
Javascript 判断 object 的特定类转载
Feb 01 Javascript
JavaScript 编写匿名函数的几种方法
Feb 21 Javascript
文字不间断滚动(上下左右)实例代码
Apr 21 Javascript
Jquery操作radio的简单实例
Jan 06 Javascript
js控制table合并具体实现
Feb 20 Javascript
Jquery 实现图片轮换
Jan 28 Javascript
Javascript中的数组常用方法解析
Jun 17 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐)
Jun 23 Javascript
Vue.js 2.0中select级联下拉框实例
Mar 06 Javascript
微信小程序之批量上传并压缩图片的实例代码
Jul 05 Javascript
vue-cli构建vue项目的步骤详解
Jan 27 Javascript
js实现磁性吸附的示例
Oct 26 #Javascript
如何构建一个Vue插件并生成npm包
Oct 26 #Javascript
解决vscode进行vue格式化,会自动补分号和双引号的问题
Oct 26 #Javascript
vue实现前端列表多条件筛选
Oct 26 #Javascript
vue实现单一筛选、删除筛选条件
Oct 26 #Javascript
vue通过接口直接下载java生成好的Excel表格案例
Oct 26 #Javascript
基于elementUI竖向表格、和并列的案例
Oct 26 #Javascript
You might like
全国FM电台频率大全 - 5 内蒙古自治区
2020/03/11 无线电
php去除字符串换行符示例分享
2014/02/13 PHP
Yii框架form表单用法实例
2014/12/04 PHP
如何在PHP中读写文件
2020/09/07 PHP
JQUBAR1.1 jQuery 柱状图插件发布
2010/11/28 Javascript
jquery中获取select选中值的代码
2011/06/27 Javascript
jquery实现固定顶部导航效果(仿蘑菇街)
2013/03/21 Javascript
jquery 延迟执行实例介绍
2013/08/20 Javascript
js 跳出页面的frameset框架示例介绍
2013/12/23 Javascript
深入剖析JavaScript中的枚举功能
2014/03/06 Javascript
JS+CSS实现简易的滑动门效果代码
2015/09/24 Javascript
ReactNative页面跳转实例代码
2016/09/27 Javascript
js设置文字颜色的方法示例
2016/12/30 Javascript
JavaScript实现短信倒计时60s
2017/10/09 Javascript
JavaScript中Array方法你该知道的正确打开方法
2018/09/11 Javascript
JavaScript作用域链实例详解
2019/01/21 Javascript
[49:05]OG vs Newbee 2019DOTA2国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
Python 的 Socket 编程
2015/03/24 Python
python实现数独算法实例
2015/06/09 Python
在Python中使用正则表达式的方法
2015/08/13 Python
Python中map,reduce,filter和sorted函数的使用方法
2015/08/17 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
2018/12/15 Python
python用opencv批量截取图像指定区域的方法
2019/01/24 Python
python中的列表与元组的使用
2019/08/08 Python
python中字典按键或键值排序的实现代码
2019/08/27 Python
实现Python3数组旋转的3种算法实例
2020/09/16 Python
css3 实现滚动条美化效果的实例代码
2021/01/06 HTML / CSS
Clarins娇韵诗英国官网:来自法国的天然护肤品牌
2017/04/18 全球购物
AMAVII眼镜官网:时尚和设计师太阳镜
2019/05/05 全球购物
动物学专业毕业生求职信
2013/10/11 职场文书
跟单文员岗位职责
2014/01/03 职场文书
毕业典礼主持词
2015/06/29 职场文书
创业计划书之甜品店
2019/09/18 职场文书
2020年元旦祝福语录,总有适合你的
2019/12/31 职场文书
一篇文章带你复习java知识点
2021/06/28 Java/Android
微前端qiankun改造日渐庞大的项目教程
2022/06/21 Javascript