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 相关文章推荐
说说掌握JavaScript语言的思想前提想学习js的朋友可以看看
Apr 01 Javascript
捕获浏览器关闭、刷新事件不同情况下的处理方法
Jun 02 Javascript
js跨域访问示例(客户端/服务端)
May 19 Javascript
javascript中attribute和property的区别详解
Jun 05 Javascript
正则表达式优化JSON字符串的技巧
Dec 24 Javascript
利用JQuery直接调用asp.net后台的简单方法
Oct 27 Javascript
详解vue2.0的Element UI的表格table列时间戳格式化
Jun 13 Javascript
基于JavaScript实现简单的音频播放功能
Jan 07 Javascript
JavaScript基于对象方法实现数组去重及排序操作示例
Jul 10 Javascript
小程序getLocation需要在app.json中声明permission字段
Apr 04 Javascript
JS pushlet XMLAdapter适配器用法案例解析
Oct 16 Javascript
threejs太阳光与阴影效果实例代码
Apr 05 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
PHP生成带有雪花背景的验证码
2008/09/28 PHP
php生成N个不重复的随机数实例
2013/11/12 PHP
php根据身份证号码计算年龄的实例代码
2014/01/18 PHP
PHP实现读取文件夹及批量重命名文件操作示例
2019/04/15 PHP
Packer 3.0 JS压缩及混淆工具 下载
2007/05/03 Javascript
jQuery动态设置form表单的enctype值(实现代码)
2013/07/04 Javascript
JavaScript中使用Substring删除字符串最后一个字符
2013/11/03 Javascript
浅谈checkbox的一些操作(实战经验)
2013/11/20 Javascript
js如何判断用户是否是用微信浏览器
2014/06/05 Javascript
使用jquery解析XML的方法
2014/09/05 Javascript
自定义函数实现IE7与IE8不兼容js中trim函数的问题
2015/02/03 Javascript
JavaScript生成的动态下雨背景效果实现方法
2015/02/25 Javascript
快速学习jQuery插件 Cookie插件使用方法
2015/12/01 Javascript
jquery 仿锚点跳转到页面指定位置的实例
2017/02/14 Javascript
js实现下拉框效果(select)
2017/03/28 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
2018/04/24 Javascript
微信小程序中使用ECharts 异步加载数据的方法
2018/06/27 Javascript
使用nodejs分离html文件里的js和css详解
2019/04/12 NodeJs
React倒计时功能实现代码——解耦通用
2020/09/18 Javascript
[01:00:49]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第二场 1月31日
2021/03/11 DOTA
Python实现SMTP发送邮件详细教程
2021/03/02 Python
简单学习Python多进程Multiprocessing
2017/08/29 Python
python matplotlib饼状图参数及用法解析
2019/11/04 Python
最小二乘法及其python实现详解
2020/02/24 Python
Python3爬虫中Ajax的用法
2020/07/10 Python
基于Python3读写INI配置文件过程解析
2020/07/23 Python
用CSS3实现背景渐变的方法
2015/07/14 HTML / CSS
应届生高等护理求职信
2013/10/12 职场文书
工程管理专业个人求职信范文
2013/12/07 职场文书
诚信考试承诺书
2014/03/27 职场文书
设计专业自荐信
2014/06/19 职场文书
水污染治理工程专业自荐信
2014/06/21 职场文书
2014业务员年终工作总结
2014/12/09 职场文书
承德避暑山庄导游词
2015/02/03 职场文书
学雷锋献爱心活动总结
2015/05/11 职场文书
德生TECSUN S-2000使用手册文字版
2022/05/10 无线电