亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

原生js怎么實現offset方法

發布時間:2021-04-23 11:34:06 來源:億速云 閱讀:160 作者:小新 欄目:web開發

這篇文章主要介紹原生js怎么實現offset方法,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

js的作用是什么

1、能夠嵌入動態文本于HTML頁面。2、對瀏覽器事件做出響應。3、讀寫HTML元素。4、在數據被提交到服務器之前驗證數據。5、檢測訪客的瀏覽器信息。6、控制cookies,包括創建和修改等。7、基于Node.js技術進行服務器端編程。

在為 jTool 提供 offset (獲取當前節點位置)方法時, 先后使用了兩種方式進行實現, 現整理出來以作記錄。

前后共使用了兩種方式實現了該方法, 這里將這兩種方法分別列出。

通過遞歸實現

function offset(element) {
  var offest = {
    top: 0,
    left: 0
  };

  var _position;

  getOffset(element, true);

  return offest;

  // 遞歸獲取 offset, 可以考慮使用 getBoundingClientRect
  function getOffset(node, init) {
    // 非Element 終止遞歸
    if (node.nodeType !== 1) {
      return;
    }
    _position = window.getComputedStyle(node)['position'];

    // position=static: 繼續遞歸父節點
    if (typeof(init) === 'undefined' && _position === 'static') {
      getOffset(node.parentNode);
      return;
    }
    offest.top = node.offsetTop + offest.top - node.scrollTop;
    offest.left = node.offsetLeft + offest.left - node.scrollLeft;

    // position = fixed: 獲取值后退出遞歸
    if (_position === 'fixed') {
      return;
    }

    getOffset(node.parentNode);
  }
}
// 執行offset
var s_kw_wrap = document.querySelector('#s_kw_wrap');
offset(s_kw_wrap); // => Object {top: 181, left: 400}

通過ClientRect實現

function offset2(node) {
  var offest = {
    top: 0,
    left: 0
  };
  // 當前為IE11以下, 直接返回{top: 0, left: 0}
  if (!node.getClientRects().length) {
    return offest;
  }
  // 當前DOM節點的 display === 'node' 時, 直接返回{top: 0, left: 0}
  if (window.getComputedStyle(node)['display'] === 'none') {
    return offest;
  }
  // Element.getBoundingClientRect()方法返回元素的大小及其相對于視口的位置。
  // 返回值包含了一組用于描述邊框的只讀屬性——left、top、right和bottom,單位為像素。除了 width 和 height 外的屬性都是相對于視口的左上角位置而言的。
  // 返回如{top: 8, right: 1432, bottom: 548, left: 8, width: 1424…}
  offest = node.getBoundingClientRect();
  var docElement = node.ownerDocument.documentElement;
  return {
    top: offest.top + window.pageYOffset - docElement.clientTop,
    left: offest.left + window.pageXOffset - docElement.clientLeft
  };
}
// 執行offset
var s_kw_wrap = document.querySelector('#s_kw_wrap');
offset2(s_kw_wrap); // => Object {top: 181.296875, left: 399.5}

offset2() 函數中使用到了 .getClientRects() 與 .getBoundingClientRect() 方法,IE11 以下瀏覽器并不支持; 所以該種實現, 只適于現代瀏覽器。

.getClientRects()

返回值是 ClientRect 對象集合(與該元素相關的CSS邊框),每個 ClientRect 對象包含一組描述該邊框的只讀屬性——left、top、right 和 bottom,單位為像素,這些屬性值是相對于視口的top-left的。

并包含 length 屬性, IE11以下可以通過是否包含 length 來驗證當前是否為IE11以上版現。

.getBoundingClientRect()

返回值包含了一組用于描述邊框的只讀屬性——left、top、right 和 bottom,單位為像素。除了 width 和 height 外的屬性都是相對于視口的左上角位置而言的。

.getBoundingClientRect() 與 .getClientRects()的關系

  1. 這兩個方法的區別與當前的 display 相關, 當 display=inline 時, .getClientRects() 返回當前節點內每一行文本的 ClientRect 對象數組, 此時數組長度等于文本行數。

  2. 當 display != inline 時, .getClientRects() 返回當前節點的 ClientRect 對象數組,此時數組長度為1.

  3. .getBoundingClientRect() 總是返回當前節點的 ClientRect 對象, 注意這里是 ClientRect 對象而不是對象數組。

以上是“原生js怎么實現offset方法”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

邵阳县| 吉林省| 齐齐哈尔市| 江孜县| 大同市| 年辖:市辖区| 洪洞县| 溧水县| 蒙自县| 永修县| 静宁县| 吴川市| 和田县| 临江市| 佛学| 成安县| 青州市| 来凤县| 旬邑县| 台湾省| 九台市| 桃园县| 酒泉市| 泸水县| 佛冈县| 兴宁市| 仪征市| 海伦市| 日喀则市| 昌吉市| 防城港市| 江川县| 阳西县| 公主岭市| 原平市| 博乐市| 郓城县| 满洲里市| 通渭县| 额济纳旗| 名山县|