全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

JavaScript限制在客户区可见范围的拖拽(解决scrollLeft和scrollTop的问题)(2)

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

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小时内与您取得联系。