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

詳解原生js實現(xiàn)offset方法

 更新時間:2017年06月15日 15:52:48   作者:奔跑的大兔子  
本篇文章主要介紹了原生js實現(xiàn)offset方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

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

通過遞歸實現(xiàn)

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: 繼續(xù)遞歸父節(jié)點
    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);
  }
}

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

通過ClientRect實現(xiàn)

function offset2(node) {
  var offest = {
    top: 0,
    left: 0
  };
  // 當前為IE11以下, 直接返回{top: 0, left: 0}
  if (!node.getClientRects().length) {
    return offest;
  }
  // 當前DOM節(jié)點的 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
  };
}
// 執(zhí)行offset
var s_kw_wrap = document.querySelector('#s_kw_wrap');
offset2(s_kw_wrap); // => Object {top: 181.296875, left: 399.5}

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

.getClientRects()

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

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

.getBoundingClientRect()

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

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

  1. 這兩個方法的區(qū)別與當前的 display 相關, 當 display=inline 時, .getClientRects() 返回當前節(jié)點內每一行文本的 ClientRect 對象數(shù)組, 此時數(shù)組長度等于文本行數(shù)。
  2. 當 display != inline 時, .getClientRects() 返回當前節(jié)點的 ClientRect 對象數(shù)組,此時數(shù)組長度為1.
  3. .getBoundingClientRect() 總是返回當前節(jié)點的 ClientRect 對象, 注意這里是 ClientRect 對象而不是對象數(shù)組。

提示

以上測試, 可以通過在百度首頁執(zhí)行進行測試, document.querySelect('#s_kw_wrap') 所獲取到的節(jié)點為百度首頁輸入框

希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • JavaScript檢測原始值、引用值、屬性

    JavaScript檢測原始值、引用值、屬性

    這篇文章主要介紹了JavaScript檢測原始值、引用值、屬性的相關資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • 詳解瀏覽器緩存和webpack緩存配置

    詳解瀏覽器緩存和webpack緩存配置

    這篇文章主要介紹了瀏覽器緩存和webpack緩存配置,瀏覽器緩存分為兩種類型,強緩存和協(xié)商緩存,具體內容詳情大家參考下本文
    2018-07-07
  • JavaScript實現(xiàn)數(shù)組去重的14種方法大全

    JavaScript實現(xiàn)數(shù)組去重的14種方法大全

    親愛的小伙伴,對于數(shù)組javascript中的數(shù)組去重方法你知道多少種呢?學會如何對數(shù)組進行去重對于javascript的學習來說也是十分重要的,下邊就讓我來分享一下我所知道的集中數(shù)組去重的方法吧,感興趣的小伙伴跟著小編一起來看看吧
    2025-03-03
  • JS獲取多維數(shù)組中相同鍵的值實現(xiàn)方法示例

    JS獲取多維數(shù)組中相同鍵的值實現(xiàn)方法示例

    這篇文章主要介紹了JS獲取多維數(shù)組中相同鍵的值實現(xiàn)方法,結合實例形式分析了JS數(shù)組遍歷、判斷、鍵值獲取等操作技巧,需要的朋友可以參考下
    2017-01-01
  • 前端強大的圖片預覽組件Viewer.js使用方法

    前端強大的圖片預覽組件Viewer.js使用方法

    這篇文章主要給大家介紹了關于前端強大的圖片預覽組件Viewer.js使用方法的相關資料,Viewer.js是一款強大的圖片查看器,雖然簡單且易上手,但是卻并不影響其在圖片查看方面的強大功能,同時這款優(yōu)秀的插件配置操作起來也非常的方便,需要的朋友可以參考下
    2024-01-01
  • js實現(xiàn)的頁面加載完畢之前l(fā)oading提示效果完整示例【附demo源碼下載】

    js實現(xiàn)的頁面加載完畢之前l(fā)oading提示效果完整示例【附demo源碼下載】

    這篇文章主要介紹了js實現(xiàn)的頁面加載完畢之前l(fā)oading提示效果,結合完整實例形式分析了js頁面加載時顯示loading效果的實現(xiàn)技巧,需要的朋友可以參考下
    2016-08-08
  • JS綁定事件的3種方法舉例示范(簡單易懂)

    JS綁定事件的3種方法舉例示范(簡單易懂)

    在JavaScript的學習中我們經常會遇到JavaScript的事件機制,例如事件綁定、事件監(jiān)聽、事件委托(事件代理)等,這篇文章主要給大家介紹了關于JS綁定事件的3種方法,需要的朋友可以參考下
    2023-11-11
  • JS實現(xiàn)搜索框文字可刪除功能

    JS實現(xiàn)搜索框文字可刪除功能

    本文給大家分享一段js代碼實現(xiàn)搜索框文字可刪除功能,代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2016-12-12
  • 微信小程序開發(fā)之toast提示插件使用示例

    微信小程序開發(fā)之toast提示插件使用示例

    這篇文章主要給大家介紹了微信小程序開發(fā)之toast提示插件的相關資料,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-06-06
  • JS集合set類的實現(xiàn)與使用方法示例

    JS集合set類的實現(xiàn)與使用方法示例

    這篇文章主要介紹了JS集合set類的實現(xiàn)與使用方法,結合具體實例形式分析了javascript集合的創(chuàng)建、元素添加、刪除以及并集、交集、補集等運算相關操作技巧,需要的朋友可以參考下
    2019-02-02

最新評論

仙居县| 泸定县| 泽州县| 台南县| 宜州市| 彝良县| 乌拉特前旗| 绥宁县| 西藏| 洪江市| 仲巴县| 三门县| 海伦市| 民权县| 博客| 高淳县| 三门峡市| 芷江| 南通市| 邵武市| 万安县| 中阳县| 左权县| 汾西县| 新建县| 绍兴县| 衢州市| 开远市| 镇远县| 汕尾市| 封开县| 顺平县| 基隆市| 安阳市| 黑龙江省| 上蔡县| 阳春市| 香河县| 海淀区| 囊谦县| 奉节县|