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 清除输入框中的数据
Apr 13 Javascript
Javascript 刷新全集常用代码
Nov 22 Javascript
javascript 10进制和62进制的相互转换
Jul 31 Javascript
AngularJS入门教程(一):静态模板
Dec 06 Javascript
nw.js实现类似微信的聊天软件
Mar 16 Javascript
由ReactJS的Hello world说开来
Jul 02 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
Dec 02 Javascript
jQuery中 DOM节点操作方法大全
Oct 12 jQuery
使用sessionStorage解决vuex在页面刷新后数据被清除的问题
Apr 13 Javascript
如何使用CSS3+JQuery实现悬浮墙式菜单
Jun 18 jQuery
vue 中的 render 函数作用详解
Feb 28 Javascript
js实现从右往左匀速显示图片(无缝轮播)
Jun 29 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 时间日期操作实战
2011/08/26 PHP
PHP HTML JavaScript MySQL代码如何互相传值的方法分享
2012/09/30 PHP
php将gd生成的图片缓存到memcache的小例子
2013/06/05 PHP
再推荐十款免费的php开发工具
2015/11/09 PHP
php.ini中date.timezone设置详解
2016/11/20 PHP
JavaScript 学习笔记(九)call和apply方法
2010/01/11 Javascript
设置checkbox为只读(readOnly)的两种方式
2013/10/11 Javascript
jquery控制显示服务器生成的图片流
2015/08/04 Javascript
javascript日期操作详解(脚本之家整理)
2015/09/05 Javascript
jquery中cookie用法实例详解(获取,存储,删除等)
2016/01/04 Javascript
javascript中去除数组重复元素的实现方法【实例】
2016/04/12 Javascript
关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
2016/05/17 Javascript
jQuery实现表格文本框淡入更改值后淡出效果
2016/09/27 Javascript
微信小程序购物商城系统开发系列-目录结构介绍
2016/11/21 Javascript
基于javascript实现按圆形排列DIV元素(二)
2016/12/02 Javascript
浅谈 Vue v-model指令的实现原理
2017/06/08 Javascript
bootstrap实现点击删除按钮弹出确认框的实例代码
2018/08/16 Javascript
小程序实现多列选择器
2019/02/15 Javascript
Python+django实现文件上传
2016/01/17 Python
详解Python 实现元胞自动机中的生命游戏(Game of life)
2018/01/27 Python
Python3.7 dataclass使用指南小结
2019/02/22 Python
Python logging日志库空间不足问题解决
2020/09/14 Python
详解HTML5中的拖放事件(Drag 和 drop)
2016/11/14 HTML / CSS
html5小程序飞入购物车(抛物线绘制运动轨迹点)
2020/10/19 HTML / CSS
爱淘宝:淘宝网购物分享平台
2017/04/28 全球购物
Marc Jacobs彩妆官网:Marc Jacobs Beauty
2017/07/03 全球购物
2014年幼儿园植树节活动方案
2014/03/02 职场文书
小学优秀教育工作者事迹材料
2014/05/09 职场文书
优秀团员事迹材料2000字
2014/08/20 职场文书
社区助残日活动总结
2014/08/29 职场文书
学习张林森心得体会
2014/09/10 职场文书
个人欠款协议书范本2014
2014/11/02 职场文书
辩论赛开场白大全(主持人+辩手)
2015/05/29 职场文书
2016年教师反腐倡廉心得体会
2016/01/13 职场文书
医学生自荐信范文(2016精选篇)
2016/01/28 职场文书
《蓝鲸的眼睛》读后感5篇
2020/01/15 职场文书