如何计算DOM元素相对于特定父元素的偏移量?

如何计算DOM元素相对于特定父元素的偏移量?

精准定位:计算dom元素相对父元素的偏移量

在复杂的DOM结构中,准确获取元素相对于特定父元素的偏移量(left和top属性)至关重要。 以下示例将演示如何高效地实现此功能。

假设我们有如下DOM结构:

<div class="wrapper" id="wrapper">     <div id="node-root">         <div id="node-2">             <div id="node-3"></div>             <div id="node-3-1"></div>             <div id="node-3-2"></div>         </div>         <div id="node-22">             <div id="node-22-1"></div>         </div>         <div id="node-33">             <div id="node-33-1"></div>         </div>     </div> </div>

我们需要计算id=”node-root”及其所有子孙节点相对于id=”wrapper”的偏移量。 以下JavaScript代码提供了解决方案:

/**  * 获取元素相对于浏览器窗口的偏移量  * @param {HTMLElement} ele DOM元素  * @returns {{top: number, left: number}}  */ function getOffset(ele) {   let top = 0, left = 0;   if (!ele || ele.nodeType !== 1) return {top, left};    do {     top += ele.offsetTop;     left += ele.offsetLeft;     ele = ele.offsetParent;   } while (ele);    return {top, left}; }  /**  * 获取元素相对于指定父元素的偏移量  * @param {HTMLElement} ele 目标元素  * @param {HTMLElement} parent 父元素  * @returns {{top: number, left: number}}  */ function getOffsetInParent(ele, parent) {   const eleOffset = getOffset(ele);   const parentOffset = getOffset(parent);   return {     top: eleOffset.top - parentOffset.top,     left: eleOffset.left - parentOffset.left   }; }  // 获取并打印结果 const node221 = document.getElementById('node-22-1'); const wrapper = document.getElementById('wrapper'); console.log(getOffsetInParent(node221, wrapper));

getOffset函数计算元素相对于浏览器窗口的偏移量,getOffsetInParent函数则利用getOffset函数计算目标元素相对于指定父元素的偏移量。 代码简洁高效,易于理解和维护。 通过调用getOffsetInParent函数,即可轻松获取所需偏移量。

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享