js实现限定范围拖拽的示例
作者:星辉 时间:2024-04-29 13:38:55
限定范围拖拽
目录
代码实例
与简易拖拽的差异
下载源码链接
代码实例
* {
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
来源:https://cloud.tencent.com/developer/article/1383245
标签:js,限定,范围拖拽


猜你喜欢
Python实现简单的列表冒泡排序和反转列表操作示例
2022-10-18 08:46:04
Python编程根据字典列表相同键的值进行合并
2023-09-29 20:10:54
Python 自动补全(vim)
2021-11-06 16:54:42

给展示性图片增加提示工具条(黑白效果)
2007-10-20 14:21:00
写给JavaScript库开发者们的规则
2008-10-26 12:30:00
Vue循环组件加validate多表单验证的实例
2024-05-05 09:23:39
JavaScript初级教程(第五课续)第1/3页
2024-04-17 10:10:07
浅谈如何提高PHP代码的质量
2024-06-05 09:47:05
vue之封装多个组件调用同一接口的案例
2024-04-09 10:47:32
matplotlib部件之矩形选区(RectangleSelector)的实现
2023-02-27 04:07:59

Go语言的反射机制详解
2024-05-09 14:58:51

一文带你深入探索Golang操作mongodb的方法
2024-05-09 09:46:14
一篇文章弄懂MySQL查询语句的执行过程
2024-01-23 20:26:05

Django ForeignKey与数据库的FOREIGN KEY约束详解
2024-01-18 15:17:40
人性化网页设计技巧
2007-10-15 13:02:00
asp如何用数据库制作一个多用户版的计数器?
2010-06-16 09:51:00
python关于变量名的基础知识点
2023-07-27 14:21:43
处理及遍历XML文档DOM元素属性及方法整理
2024-05-13 10:39:38
PHP图片库imagemagick安装方法
2023-11-16 18:54:38
ASP中使用存储过程介绍
2008-10-10 12:10:00