主题
尺寸大小 & 偏移量 & 滚动
示例
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 定位的(
position
为absolute
、relative
、fixed
或sticky
) - 或
<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.pageXOffset
是window.scrollX
的别名。window.pageYOffset
是window.scrollY
的别名。
设置滚动
通过更改
scrollTop/scrollLeft
来滚动常规元素。方法
scrollBy(x,y)
将页面滚动至 相对于当前位置的 (x, y) 位置。例如,scrollBy(0,10)
会将页面向下滚动 10px。方法
scrollTo(pageX,pageY)
将页面滚动至 绝对坐标,使得可见部分的左上角具有相对于文档左上角的坐标 (pageX, pageY)。就像设置了scrollLeft/scrollTop
一样。要滚动到最开始,我们可以使用scrollTo(0,0)
。scrollIntoView()
方法会滚动元素的父容器,使被调用scrollIntoView()
的元素对用户可见。scrollIntoView([alignToTop])
- 如果为 true,元素的顶端将和其所在滚动区的可视区域的顶端对齐。相应的
scrollIntoViewOptions: { block: "start", inline: "nearest" }
。这是这个参数的默认值。 - 如果为 false,元素的底端将和其所在滚动区的可视区域的底端对齐。相应的
scrollIntoViewOptions: { block: "end", inline: "nearest" }
。
- 如果为 true,元素的顶端将和其所在滚动区的可视区域的顶端对齐。相应的
scrollIntoView(scrollIntoViewOptions)
behavior
:定义滚动是立即的还是平滑的动画。该选项是一个字符串,必须采用以下值之一:smooth
:滚动应该是平滑的动画。instant
:滚动应该通过一次跳跃立刻发生。auto
:滚动行为由scroll-behavior
的计算值决定。
block
:定义垂直方向的对齐,start
、center
、end
或nearest
之一。默认为start
。inline
:定义水平方向的对齐,start
、center
、end
或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 ) |