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 相关文章推荐
常用参考资料(手册)下载或者链接
Jul 22 Javascript
jquery插件制作 表单验证实现代码
Aug 17 Javascript
JQuery插件fancybox无法在弹出层使用左右键的解决办法
Dec 25 Javascript
[原创]推荐10款最热门jQuery UI框架
Aug 19 Javascript
jQuery多级弹出菜单插件ZoneMenu
Dec 18 Javascript
JavaScript中数据结构与算法(三):链表
Jun 19 Javascript
javascript框架设计之浏览器的嗅探和特征侦测
Jun 23 Javascript
PHP7新特性简述
Jun 11 Javascript
详解Vue如何支持JSX语法
Nov 10 Javascript
Angular4编程之表单响应功能示例
Dec 13 Javascript
安装Node.js并启动本地服务的操作教程
May 12 Javascript
Vue.js 十五分钟入门图文教程
Sep 12 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创建动态图像
2006/10/09 PHP
php去除重复字的实现代码
2011/09/16 PHP
php中count获取多维数组长度的方法
2014/11/03 PHP
PHP 信号管理知识整理汇总
2017/02/19 PHP
php 算法之实现相对路径的实例
2017/10/17 PHP
js利用Array.splice实现Array的insert/remove
2009/01/13 Javascript
jQuery ui插件的使用方法代码实例
2013/05/08 Javascript
js固定DIV高度,超出部分自动添加滚动条的简单方法
2013/07/10 Javascript
js展开闭合效果演示代码
2013/07/24 Javascript
利用jQuery实现漂亮的圆形进度条倒计时插件
2015/09/30 Javascript
分享经典的JavaScript开发技巧
2015/11/21 Javascript
js数组操作方法总结(必看篇)
2016/11/22 Javascript
详解Angular2表单-模板驱动的表单(Template-Driven Forms)
2017/08/04 Javascript
js动态设置select下拉菜单的默认选中项实例
2018/08/21 Javascript
用WebStorm进行Angularjs 2开发(环境篇:Windows 10,Angular-cli方式)
2018/12/05 Javascript
javascript实现的时间格式加8小时功能示例
2019/06/13 Javascript
解决vue初始化项目时,一直卡在Project description上的问题
2019/10/31 Javascript
vue移动端的左右滑动事件详解
2020/06/17 Javascript
关于vue的列表图片选中打钩操作
2020/09/09 Javascript
关于JavaScript中异步/等待的用法与理解
2020/11/18 Javascript
[05:31]干嘛呢兄弟!DOTA2 TI9语音轮盘部分出处
2019/05/14 DOTA
[01:01:52]完美世界DOTA2联赛PWL S2 GXR vs Magma 第二场 11.25
2020/11/26 DOTA
Python IDE环境之 新版Pycharm安装详细教程
2020/03/05 Python
jupyter 实现notebook中显示完整的行和列
2020/04/09 Python
Python使用socket_TCP实现小文件下载功能
2020/10/09 Python
波兰家具和室内装饰品购物网站:Vivre
2018/04/10 全球购物
Vector, ArrayList, HashTable, HashMap哪些是线程安全的,哪些不是
2015/10/12 面试题
Java servlet面试题
2012/03/04 面试题
教师自荐信范文
2013/12/09 职场文书
企业演讲比赛主持词
2014/03/18 职场文书
表彰大会主持词
2014/03/26 职场文书
团日活动总结范文
2014/04/25 职场文书
公司党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
家长高考寄语
2015/02/27 职场文书
护士自我推荐信范文
2015/03/24 职场文书
班主任寄语2016
2015/12/04 职场文书