Skip to content

尺寸大小 & 偏移量 & 滚动

示例

metric-all

client 系列

  • clientTop/Left内侧与外侧的相对坐标,可以看作是“边框”
  • clientWidth/Height元素的内容区 + 内边距(padding),不包括边框(border)、滚动条

scroll 系列

  • scrollLeft/Top已滚动的水平/垂直距离
  • scrollWidth/Height内容区 + 内边距(padding)(含溢出隐藏部分)

offset 系列

  • offsetLeft/Top元素相对于 offsetParent 左侧/上侧的偏移量
  • offsetWidth/Height元素的内容区 + 内边距(padding)+ 边框(border)宽度,不包含外边距(margin)

offsetParent

offsetParent 是最接近的祖先(ancestor),在浏览器渲染期间,它被用于计算坐标。

最近的祖先为下列之一:

  • CSS 定位的(positionabsoluterelativefixedsticky
  • <td><th><table>
  • <body>

有以下几种情况下,offsetParent 的值为 null

  • 对于未显示的元素(display:none 或者不在文档中)。
  • 对于 <body><html>
  • 对于带有 position:fixed 的元素。

<html>

document.documentElement 代表 <html> 元素,通常用于获取整个网页的大小。

类型属性说明
可见区域document.documentElement.clientWidth视口宽度(不含滚动条)
document.documentElement.clientHeight视口高度(不含滚动条)
滚动尺寸document.documentElement.scrollWidth整个 HTML 文档的宽度
document.documentElement.scrollHeight整个 HTML 文档的高度
滚动偏移document.documentElement.scrollTop页面垂直滚动距离
document.documentElement.scrollLeft页面水平滚动距离

提示

请注意:当 HTML 中没有 <!DOCTYPE HTML> 时,顶层级(top-level)几何属性的工作方式可能就会有所不同。可能会出现一些稀奇古怪的情况。

在现代 HTML 中,我们始终都应该写 DOCTYPE。

<body>

document.body 代表 <body>,但一般推荐用 document.documentElement 来获取页面尺寸,因为某些情况下 <body> 不包含整个页面。

类型属性说明
可见区域document.body.clientWidth视口宽度
document.body.clientHeight视口高度
滚动尺寸document.body.scrollWidth整个 <body> 的宽度
document.body.scrollHeight整个 <body> 的高度
滚动偏移document.body.scrollTop页面滚动距离(但一般用 documentElement.scrollTop

注意

  • 标准模式 下,documentElement.scrollTop 是正确的滚动距离。
  • 怪异模式(Quirks Mode) 下,可能 document.body.scrollTop 也能获取滚动值。

浏览器

浏览器窗口的尺寸由 window 提供,包括 视口尺寸、窗口尺寸、滚动位置

类型属性说明
可见区域window.innerWidth浏览器视口宽度(含滚动条)
window.innerHeight浏览器视口高度(含滚动条)
窗口整体尺寸window.outerWidth整个浏览器窗口的宽度(包括工具栏、边框等)
window.outerHeight整个浏览器窗口的高度(包括工具栏、边框等)
滚动偏移window.scrollY页面垂直滚动距离(等价于 document.documentElement.scrollTop
window.scrollX页面水平滚动距离(等价于 document.documentElement.scrollLeft

提示

由于历史原因,存在了这两种属性,但它们是一样的:

  • window.pageXOffsetwindow.scrollX 的别名。
  • window.pageYOffsetwindow.scrollY 的别名。

设置滚动

  1. 通过更改 scrollTop/scrollLeft 来滚动常规元素。

  2. 方法 scrollBy(x,y) 将页面滚动至 相对于当前位置的 (x, y) 位置。例如,scrollBy(0,10) 会将页面向下滚动 10px。

  3. 方法 scrollTo(pageX,pageY) 将页面滚动至 绝对坐标,使得可见部分的左上角具有相对于文档左上角的坐标 (pageX, pageY)。就像设置了 scrollLeft/scrollTop 一样。要滚动到最开始,我们可以使用 scrollTo(0,0)

  4. scrollIntoView() 方法会滚动元素的父容器,使被调用 scrollIntoView() 的元素对用户可见。

    • scrollIntoView([alignToTop])

      • 如果为 true,元素的顶端将和其所在滚动区的可视区域的顶端对齐。相应的 scrollIntoViewOptions: { block: "start", inline: "nearest" }。这是这个参数的默认值。
      • 如果为 false,元素的底端将和其所在滚动区的可视区域的底端对齐。相应的 scrollIntoViewOptions: { block: "end", inline: "nearest" }
    • scrollIntoView(scrollIntoViewOptions)

      • behavior:定义滚动是立即的还是平滑的动画。该选项是一个字符串,必须采用以下值之一:
        • smooth:滚动应该是平滑的动画。
        • instant:滚动应该通过一次跳跃立刻发生。
        • auto:滚动行为由 scroll-behavior 的计算值决定。
      • block:定义垂直方向的对齐,startcenterend nearest 之一。默认为 start
      • inline:定义水平方向的对齐,startcenterend nearest 之一。默认为 nearest

禁止滚动

例如,禁止滚动 body:document.body.style.overflow = "hidden"

屏幕

window.screen 提供 设备屏幕 的信息。

类型属性说明
屏幕尺寸screen.width设备屏幕的物理宽度
screen.height设备屏幕的物理高度
可用尺寸screen.availWidth去掉任务栏等 UI 后的可用宽度
screen.availHeight去掉任务栏等 UI 后的可用高度
颜色深度screen.pixelDepth屏幕颜色深度(位数)
screen.colorDepth颜色深度(一般等于 pixelDepth

基于 MIT 许可发布