最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript限制在客戶區(qū)可見范圍的拖拽(解決scrollLeft和scrollTop的問題)(2)

 更新時間:2017年05月17日 14:59:47   作者:GY_U_YG  
這篇文章主要介紹了JavaScript限制在客戶區(qū)可見范圍的拖拽,解決scrollLeft和scrollTop的問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下

限制范圍的拖拽,要求被拖拽的對象必須在客戶區(qū)可見范圍!

div是body的子元素,div的left/top是針對body的,不是針對可見客戶區(qū)的,所以在拖拽的過程中不得不考慮被卷走的部分,因為網(wǎng)頁文檔可能很大,無論寬度還是高度都可能大于客戶區(qū),等于客戶區(qū)大小就很好處理,大于的話就得考慮scrollTop和scrollLeft,否則div會跟鼠標脫離,因為距離都算錯了。

/*切記:凡是clientX/Y 的 一定記得卷走的部分*/
document.body是DOM中Document對象里的body節(jié)點,
document.documentElement是文檔對象根節(jié)點(html)的引用,
document.documentElement.scrollHeight網(wǎng)頁整體高度

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>客戶區(qū)可見范圍限制拖拽</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>

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • javascript判斷網(wǎng)頁是關(guān)閉還是刷新

    javascript判斷網(wǎng)頁是關(guān)閉還是刷新

    本篇文章給大家介紹js判斷網(wǎng)頁是關(guān)閉還是刷新,實現(xiàn)原理就是通過離開頁面行為時間onunload觸發(fā)時間去檢測此時的瀏覽器的窗口大小,根據(jù)大小由此判斷用戶是刷新,跳轉(zhuǎn)或是關(guān)閉行為程序,需要的朋友可以參考下本文
    2015-09-09
  • 基于BootStrap與jQuery.validate實現(xiàn)表單提交校驗功能

    基于BootStrap與jQuery.validate實現(xiàn)表單提交校驗功能

    學(xué)習前臺后臺最開始接觸的業(yè)務(wù)都是用戶注冊和登錄,下面通過本文給大家介紹BootStrap與jQuery.validate實現(xiàn)表單提交校驗功能,感興趣的朋友一起學(xué)習吧
    2016-12-12
  • 理解javascript中的MVC模式

    理解javascript中的MVC模式

    這篇文章主要為大家介紹了javascript中的MVC模式,MVC是一種軟件架構(gòu)模式,一般把軟件模式分為三部分,本文就針對MVC模式的三部分進行講解,感興趣的小伙伴們可以參考一下
    2016-01-01
  • 利用js實現(xiàn)遮罩以及彈出可移動登錄窗口

    利用js實現(xiàn)遮罩以及彈出可移動登錄窗口

    本篇文章是對使用js實現(xiàn)遮罩以及彈出可移動登錄窗口的實現(xiàn)方法進行了詳細的分析介紹,需要的朋友參考下
    2013-07-07
  • JavaScript六種常見的繼承方法分享

    JavaScript六種常見的繼承方法分享

    繼承是面向?qū)ο缶幊讨械囊粋€重要概念,它允許一個對象(子類或派生類)獲取另一個對象(父類或基類)的屬性和方法,在 JavaScript 中,有多種方式可以實現(xiàn)繼承,本文將給大家介紹六種常見的JavaScript繼承方法,需要的朋友可以參考下
    2023-09-09
  • webpack4 處理CSS的方法示例

    webpack4 處理CSS的方法示例

    這篇文章主要介紹了webpack4 處理CSS的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • js+css使DIV始終居于屏幕中間 左下 左上 右上 右下的代碼集合

    js+css使DIV始終居于屏幕中間 左下 左上 右上 右下的代碼集合

    js+css使DIV始終居于屏幕中間 左下 左上 右上 右下的代碼集合,需要的朋友可以參考下。
    2011-03-03
  • 詳解JavaScript如何實現(xiàn)四種常用排序

    詳解JavaScript如何實現(xiàn)四種常用排序

    這篇文章主要為大家介紹了如何利用JavaScript實現(xiàn)四個常用的排序:插入排序、交換排序、選擇排序和歸并排序,文中利用動圖詳細介紹了實現(xiàn)過程,需要的可以參考一下
    2022-02-02
  • 淺談js算法和流程控制

    淺談js算法和流程控制

    代碼整體結(jié)構(gòu)是執(zhí)行速度的決定因素之一,代碼量少不一定運行速度快,代碼量多也不一定運行速度慢。本篇文章將對js的算法和流程控制進行介紹,下面跟著小編一起來看下吧
    2016-12-12
  • 詳解CommonJS和ES6模塊循環(huán)加載處理的區(qū)別

    詳解CommonJS和ES6模塊循環(huán)加載處理的區(qū)別

    這篇文章主要介紹了詳解CommonJS和ES6模塊循環(huán)加載處理的區(qū)別,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12

最新評論

云阳县| 巫山县| 北京市| 辛集市| 穆棱市| 册亨县| 大兴区| 隆尧县| 赞皇县| 阿克苏市| 含山县| 团风县| 揭东县| 岳阳市| 碌曲县| 祁连县| 武陟县| 多伦县| 台东县| 千阳县| 安丘市| 嫩江县| 贺兰县| 桐乡市| 盐源县| 专栏| 九龙城区| 新昌县| 佛冈县| 天水市| 吉林市| 崇义县| 蒲江县| 江川县| 任丘市| 鄂伦春自治旗| 五指山市| 康平县| 梅河口市| 高密市| 商河县|