限制范围的拖拽,要求被拖拽的对象必须在客户区可见范围!

div是body的子元素,div的left/top是针对body的,不是针对可见客户区的,所以在拖拽的过程中不得不考虑被卷走的部分,因为网页文档可能很大,无论宽度还是高度都可能大于客户区,等于客户区大小就很好处理,大于的话就得考虑scrollTop和scrollLeft,否则div会跟鼠标脱离,因为距离都算错了。
/*切记:凡是clientX/Y 的 一定记得卷走的部分*/ document.body是DOM中Document对象里的body节点, document.documentElement是文档对象根节点(html)的引用, document.documentElement.scrollHeight网页整体高度
function getPos(ev) {
var st = document.documentElement.scrollTop || document.body.scrollTop;
var sl = document.documentElement.scrollLeft || document.body.scrollLeft;
return {x:sl+ev.clientX, y:st+ev.clientY};
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>客户区可见范围限制拖拽</title>
<style type="text/css">
* {
padding: 0;
margin: 0;
}
#div1 {
width: 100px;
height: 100px;
background: orange;
position: absolute;
}
</style>
</head>
<body style="width: 200000px;height: 200000px;">
<div id="div1"></div>
<script type="text/javascript">
var oDiv = document.getElementById('div1');
function getStyle(obj, attr) {
if (obj.currentStyle) {
return obj.currentStyle[attr];
} else {
return getComputedStyle(obj, null)[attr];
}
}
//getPos得到的是鼠标当前位置距离页面最左/上边的距离,包括被卷走的部分
function getPos(ev) {
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
return {
x : scrollLeft + ev.clientX,
y : scrollTop + ev.clientY
};
}
function getScrollPos() {
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
return {
x : scrollLeft,
y : scrollTop
};
}
oDiv.onmousedown = function(ev) {
var oEvent = ev || event;
var pos = getPos(oEvent);
var disX = pos.x - parseInt(getStyle(oDiv, 'left'));
var disY = pos.y - parseInt(getStyle(oDiv, 'top'));
document.onmousemove = function(ev) {
var oEvent = ev || event;
var l = oEvent.clientX - disX;
var t = oEvent.clientY - disY;
if (l < 0) {
l = 0;
} else if (l > document.documentElement.clientWidth - oDiv.offsetWidth) {
l = document.documentElement.clientWidth - oDiv.offsetWidth;
}
if (t < 0) {
t = 0;
} else if (t > document.documentElement.clientHeight - oDiv.offsetHeight) {
t = document.documentElement.clientHeight - oDiv.offsetHeight;
}
l = l + getScrollPos().x;//最后left是相对于body的,加上卷走的部分scrollLeft;
t = t + getScrollPos().y;//加上卷走的高度scrollTop
// oDiv.style.left = l + 'px';
// oDiv.style.top = t + 'px';
oDiv.style.cssText = ';left:' + l + 'px;top:' + t + 'px;';
};
document.onmouseup = function() {
document.onmousemove = null;
document.onmouseup = null;
};
};
</script>
</body>
</html>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# js
# 拖拽
# scrollLeft
# scrollTop
# JS属性scrollTop clientHeight scrollHeight理解学习
# js浏览器滚动条卷去的高度scrolltop(实例讲解)
# js中scrollTop()方法和scroll()方法用法示例
# 深入浅析JavaScript中的scrollTop
# js scrollTop如何到达指定位置
# 卷走
# 鼠标
# 的是
# 文档
# 很好
# 错了
# 就得
# 相对于
# 大家多多
# 会跟
# 都算
# 过程中
# getPos
# scrollHeight
# function
# Document
# DOM
# documentElement
相关文章:
如何配置WinSCP新建站点的密钥验证步骤?
如何在IIS中新建站点并配置端口与IP地址?
建站之星logo尺寸如何设置最合适?
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
如何在企业微信快速生成手机电脑官网?
网站图片在线制作软件,怎么在图片上做链接?
css网站制作参考文献有哪些,易聊怎么注册?
学校为何禁止电信移动建设网站?
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
如何快速上传自定义模板至建站之星?
如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法
重庆市网站制作公司,重庆招聘网站哪个好?
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
如何快速搭建高效可靠的建站解决方案?
宝华建站服务条款解析:五站合一功能与SEO优化设置指南
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
智能起名网站制作软件有哪些,制作logo的软件?
开源网站制作软件,开源网站什么意思?
建站主机选购指南与交易推荐:核心配置解析
如何用景安虚拟主机手机版绑定域名建站?
济南专业网站制作公司,济南信息工程学校怎么样?
上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?
如何快速搭建高效WAP手机网站?
ui设计制作网站有哪些,手机UI设计网址吗?
如何在IIS7上新建站点并设置安全权限?
javascript中对象的定义、使用以及对象和原型链操作小结
如何基于云服务器快速搭建网站及云盘系统?
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
东莞专业制作网站的公司,东莞大学生网的网址是什么?
网站好制作吗知乎,网站开发好学吗?有什么技巧?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
c# 在高并发下使用反射发射(Reflection.Emit)的性能
网站制作员失业,怎样查看自己网站的注册者?
做企业网站制作流程,企业网站制作基本流程有哪些?
如何在阿里云服务器自主搭建网站?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
重庆网站制作公司哪家好,重庆中考招生办官方网站?
已有域名和空间如何快速搭建网站?
股票网站制作软件,网上股票怎么开户?
如何通过NAT技术实现内网高效建站?
网站制作说明怎么写,简述网页设计的流程并说明原因?
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
建站主机如何选?性能与价格怎样平衡?
洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?
微课制作网站有哪些,微课网怎么进?
建站主机是什么?如何选择适合的建站主机?
阿里云网站制作公司,阿里云快速搭建网站好用吗?
教学网站制作软件,学习*后期制作的网站有哪些?
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
*请认真填写需求信息,我们会在24小时内与您取得联系。