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

JavaScript限制在客戶(hù)區(qū)可見(jiàn)范圍的拖拽(解決scrollLeft和scrollTop的問(wèn)題)(2)

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

限制范圍的拖拽,要求被拖拽的對(duì)象必須在客戶(hù)區(qū)可見(jiàn)范圍!

div是body的子元素,div的left/top是針對(duì)body的,不是針對(duì)可見(jiàn)客戶(hù)區(qū)的,所以在拖拽的過(guò)程中不得不考慮被卷走的部分,因?yàn)榫W(wǎng)頁(yè)文檔可能很大,無(wú)論寬度還是高度都可能大于客戶(hù)區(qū),等于客戶(hù)區(qū)大小就很好處理,大于的話(huà)就得考慮scrollTop和scrollLeft,否則div會(huì)跟鼠標(biāo)脫離,因?yàn)榫嚯x都算錯(cuò)了。

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

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>客戶(hù)區(qū)可見(jiàn)范圍限制拖拽</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得到的是鼠標(biāo)當(dāng)前位置距離頁(yè)面最左/上邊的距離,包括被卷走的部分
    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是相對(duì)于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>

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

相關(guān)文章

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

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

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

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

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

    理解javascript中的MVC模式

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

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

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

    JavaScript六種常見(jiàn)的繼承方法分享

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

    webpack4 處理CSS的方法示例

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

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

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

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

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

    淺談js算法和流程控制

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

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

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

最新評(píng)論

迁西县| 惠安县| 双柏县| 周至县| 夏津县| 庆云县| 远安县| 班戈县| 视频| 庆城县| 洱源县| 崇州市| 垦利县| 海门市| 呼伦贝尔市| 鹿邑县| 电白县| 大关县| 梁平县| 明溪县| 澄城县| 谢通门县| 南漳县| 黑龙江省| 太白县| 沅江市| 闻喜县| 宜州市| 象山县| 资中县| 松江区| 汕尾市| 潞西市| 登封市| 浦北县| 绩溪县| 楚雄市| 喀喇| 政和县| 洛宁县| 瓮安县|