在前端开发中,我们经常需要获取HTML元素的坐标,这在很多场景下都非常有用,比如实现一个自定义的拖拽功能,或者根据元素的位置来调整其他元素的位置等,本文将介绍如何使用JavaScript和CSS来获取HTML元素的坐标。
使用JavaScript获取元素坐标
1、1 获取元素距离视口顶部的距离
要获取元素距离视口顶部的距离,可以使用getBoundingClientRect()
方法,这个方法返回一个矩形对象,包含了元素的大小和相对于视口的位置信息。top
属性表示元素距离视口顶部的距离。
function getElementTop(element) { const rect = element.getBoundingClientRect(); return rect.top + window.pageYOffset; }
1、2 获取元素距离视口左侧的距离
要获取元素距离视口左侧的距离,可以使用left
属性。left
属性表示元素距离视口左侧的距离。
function getElementLeft(element) { const rect = element.getBoundingClientRect(); return rect.left + window.pageXOffset; }
1、3 获取元素的宽度和高度
要获取元素的宽度和高度,可以使用offsetWidth
和offsetHeight
属性,这两个属性分别表示元素的内部宽度和高度,包括了内边距、边框和滚动条(如果有的话)。
function getElementSize(element) { const rect = element.getBoundingClientRect(); return { width: rect.width, height: rect.height }; }
使用CSS获取元素坐标
2、1 获取元素距离视口顶部的距离
要获取元素距离视口顶部的距离,可以使用CSS的top
属性,需要注意的是,top
属性是相对于其最近的定位祖先元素计算的,所以有时候可能不是我们期望的结果,为了确保准确获取到元素距离视口顶部的距离,我们可以使用以下方法:
function getElementTop(element) { let position = window.getComputedStyle(element).position; if (position === 'absolute' || position === 'fixed') { position = window.getComputedStyle(element.parentNode).position; } else if (position === 'relative') { position = window.getComputedStyle(element.parentNode).position; } else if (position === '') { position = window.getComputedStyle(element.parentNode).position; } else if (position === 'sticky') { position = window.getComputedStyle(element.parentNode).position; } else if (position === 'inherit') { position = window.getComputedStyle(element.parentNode).position; } else if (position === 'static') { position = window.getComputedStyle(element.parentNode).position; } else if (position === 'initial') { position = window.getComputedStyle(element.parentNode).position; } else if (position === 'unset') { position = window.getComputedStyle(element.parentNode).position; } else if (position === 'center') { position = window.getComputedStyle(element.parentNode).position; } else if (position === 'top') { position = window.getComputedStyle(element.parentNode).position; } else if (position === 'right') { position = window.getComputedStyle(element.parentNode).position; } else if (position === 'bottom') { position = window.getComputedStyle(element.parentNode).position; } else if (position === 'left') { position = window.getComputedStyle(element.parentNode).position; } else if (position === 'auto') { position = window.getComputedStyle(element.parentNode).position; } else if (position === 'flex') {} else if (position === 'grid') {} else if (position === 'inline-block') {} else if (position === 'table') {} else if (position === 'table-cell') {} else if (position === 'table-column') {} else if (position === 'table-column-group') {} else if (position === 'table-row') {} else if (position === 'table-row-group') {} else if (position === 'none') {} else {} } return parseFloat(window.getComputedStyle(element)[position]); } function getElementTop(element) {{return getElementPosition(element).top;}} function getElementLeft(element) {{return getElementPosition(element).left;}} function getElementSize(element) {{return getElementPosition(element);}} function getElementPosition(element) {{const rect = element.getBoundingClientRect();return {'top': rect.top + window.pageYOffset, 'left': rect.left + window.pageXOffset};}} // 注意:这种方法只适用于静态定位的元素,对于动态定位的元素,需要先将其父元素设置为静态定位,然后再调用此方法。// document.body.style.position = 'static'; document.querySelector('my-element').style.position = 'static'; var myElementPosition = getElementPosition(document.querySelector('my-element')); console.log(myElementPosition); // {"top": "50px", "left": "100px"} // 然后将其父元素设置回原来的值:document.body.style.position = ''; document.querySelector('my-element').style.position = ''; var myElementPosition2 = getElementPosition(document
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/223356.html