获取元素宽高getComputedStyle、getBoundingClientRect、getClientRects

133 阅读3分钟

在 JavaScript 中,getComputedStylegetBoundingClientRect 和 getClientRects 是用于获取元素宽高及位置信息的方法,以下是对它们的介绍:

  1. getComputedStyle()

    • 这个方法可以获取指定元素的最终计算后的 CSS 样式。
    • 可以通过该方法获取元素的宽度和高度属性,如 width 和 height
    • 适用场景: 当需要获取元素的具体 CSS 样式属性值时很有用,不仅限于宽高,还可以获取颜色、字体大小等各种样式属性。
    • 示例:
     const element = document.getElementById('myElement');
     const styles = window.getComputedStyle(element);
     const width = styles.width;
     const height = styles.height;
  • 返回的宽度和高度通常包含单位,如 100px,需要进一步处理(如 parseInt())才能得到纯数字的宽高值。
  1. getBoundingClientRect()

    • 返回一个 DOMRect 对象,包含元素的位置和大小信息。
    • 可以直接获取元素的宽度和高度,以及相对于视口的位置信息。
    • 适用场景: 常用于获取元素相对于视口的位置和大小,在需要进行元素的定位、碰撞检测等场景下非常方便。
    • 示例:
     const element = document.getElementById('myElement');
     const rect = element.getBoundingClientRect();
     const width = rect.width;
     const height = rect.height;
  • 返回的宽度和高度是数值类型,不需要额外处理单位。
  1. getClientRects()

    • 返回一个 ClientRect 对象的集合,代表元素的每个边框矩形。
    • 如果元素有多个边框矩形(例如多行文本的元素),则会返回多个 ClientRect 对象。
    • 通常用于获取元素的多个部分的位置和大小信息。
    • 适用场景: - 当需要获取元素内部多个部分的位置和大小信息时比较有用,例如处理多行文本的布局或者有多个内联元素组成的复杂布局。
    • 示例:
     const element = document.getElementById('myElement');
     const rects = element.getClientRects();
     for (const rect of rects) {
       const width = rect.width;
       const height = rect.height;
     }
  • 每个 ClientRect 对象的宽度和高度也是数值类型。

这些方法在不同的场景下有不同的用途。getComputedStyle 更适用于获取 CSS 样式属性,getBoundingClientRect 通常用于获取元素相对于视口的位置和大小,而 getClientRects 可以用于处理具有多个边框矩形的元素。

除了 getComputedStyle()和 getBoundingClientRect()方法,还有哪些方法可以获取元素的宽高?

以下是一些获取元素宽高的其他方法:

一、使用 offsetWidth 和 offsetHeight 属性

const element = document.getElementById('myElement');
const width = element.offsetWidth;
const height = element.offsetHeight;

offsetWidth 和 offsetHeight 返回元素的布局宽度和高度,包括元素的边框、内边距和内容的尺寸。

二、使用 clientWidth 和 clientHeight 属性

const element = document.getElementById('myElement');
const width = element.clientWidth;
const height = element.clientHeight;

clientWidth 和 clientHeight 返回元素的内容区域宽度和高度,加上内边距大小,但不包括边框和滚动条。

三、通过元素的 style 属性设置并获取尺寸

const element = document.getElementById('myElement');
// 先设置元素的尺寸属性,假设单位为像素
element.style.width = '200px';
element.style.height = '150px';
const width = parseInt(element.style.width);
const height = parseInt(element.style.height);

这种方法需要先设置元素的尺寸属性,然后通过 style 属性获取,但只适用于已设置了 style 属性的元素,并且获取的值是字符串类型,需要进行类型转换。

创作者训练营系列

学习NestJS的第一个接口

学习NestJS开发小程序后台(一)

项目中的文字下划线实现方案

ResizeObserver在项目中的应用