还不知道怎么测量页面元素大小么?

200 阅读2分钟

API 集合

  • Element.getBoundingClientRect() 方法返回一个 对象,包含属性:width,height,left, right, x, y, top,bottom,其提供了元素的大小及其相对于 视口的位置。

image.png

注意:这里得到的 width 为 contentWidth + padding + border

  • HTMLElement.offsetHeight 返回元素的像素高度,为一个整数,值包含内容高度,padding以及border

  • HTMLElement.offsetWidth 返回元素的像素宽度,为一个整数,值包含内容宽度,padding以及border

  • HTMLElement.offsetLeftHTMLElement.offsetTop 返回元素左上角相对于 offsetParent 左上角的距离offsetParent 为相对于元素来说距离最近的定位父元素或者table, td, th, body 元素

  • Element.scrollHeight 返回元素的内容高度,包括不在适口范围内的高度(被滑动隐藏了),包括元素的 padding, 但不包括元素的 border 和 margin

image.png

  • Element.scrollTop 返回这个元素的内容顶部到他视口可见内容的距离(视口顶部向上元素被隐藏的内容),可能为一个小数,可修改,修改之后页面会自动滚动到对应的位置

  • Element.clientHeight = height + padding - 水平滚动条高度(如果存在)即不包括border 和 margin

  • Element.clientWidth = width+ padding - 垂直滚动条高度(如果存在)即不包括border 和 margin

image.png

  • Window.scrollX 返回页面水平方向从左侧开始的滚动值

  • Window.scrollY 返回页面垂直方向从顶部开始的滚动值

  • Window.scroll()/Window.scrollTo() 滚动到文档中的某个坐标(移动到左上角),参数为(x-coord,y-coord) 或者为 ({top: number, left: number, behavior: ‘smooth’/ ‘instant’/’auto’})

  • MouseEvent.screenX 返回事件发生时鼠标距离视口左边界的距离(不包含水平方向的滚动距离),为一个浮点数

  • MouseEvent.screenY 返回事件发生时鼠标距离视口上边界的距离(不包含垂直方向的滚动距离),为一个浮点数

 

实践问题

  1. 判断元素是否滚动到底部:
Math.abs(element.scrollHeight-element.clientHeight - element.scrollTop) < 1
  1. 判断元素是否能滚动
window.getComputedStyle(element).overflowY === 'visible'

window.getComputedStyle(element).overflowY !== 'hidden'
  1. 获取当前元素距离页面顶部的距离
const viewTop= ele.getBoundingClientRect().top

toPageStartLength = Window.scrollY + viewTop