|
4 | 4 |
|
5 | 5 | 大多数 JavaScript 方法处理的是以下两种坐标系中的一个: |
6 | 6 |
|
7 | | -1. **相对于窗口** — 类似于 `position:fixed`,从窗口的顶部/左侧边缘计算得出。 |
| 7 | +1. **相对于窗口** —— 类似于 `position:fixed`,从窗口的顶部/左侧边缘计算得出。 |
8 | 8 | - 我们将这些坐标表示为 `clientX/clientY`,当我们研究事件属性时,就会明白为什么使用这种名称来表示坐标。 |
9 | | -2. **相对于文档** — 与文档根(document root)中的 `position:absolute` 类似,从文档的顶部/左侧边缘计算得出。 |
| 9 | +2. **相对于文档** —— 与文档根(document root)中的 `position:absolute` 类似,从文档的顶部/左侧边缘计算得出。 |
10 | 10 | - 我们将它们表示为 `pageX/pageY`。 |
11 | 11 |
|
12 | 12 | 当页面滚动到最开始时,此时窗口的左上角恰好是文档的左上角,它们的坐标彼此相等。但是,在文档移动之后,元素的窗口相对坐标会发生变化,因为元素在窗口中移动,而元素在文档中的相对坐标保持不变。 |
|
16 | 16 |  |
17 | 17 |
|
18 | 18 | 当文档滚动了: |
19 | | -- `pageY` — 元素在文档中的相对坐标保持不变,从文档顶部(现在已滚动出去)开始计算。 |
20 | | -- `clientY` — 窗口相对坐标确实发生了变化(箭头变短了),因为同一个点越来越靠近窗口顶部。 |
| 19 | +- `pageY` —— 元素在文档中的相对坐标保持不变,从文档顶部(现在已滚动出去)开始计算。 |
| 20 | +- `clientY` —— 窗口相对坐标确实发生了变化(箭头变短了),因为同一个点越来越靠近窗口顶部。 |
21 | 21 |
|
22 | 22 | ## 元素坐标:getBoundingClientRect |
23 | 23 |
|
24 | 24 | 方法 `elem.getBoundingClientRect()` 返回最小矩形的窗口坐标,该矩形将 `elem` 作为内建 [DOMRect](https://www.w3.org/TR/geometry-1/#domrect) 类的对象。 |
25 | 25 |
|
26 | 26 | 主要的 `DOMRect` 属性: |
27 | 27 |
|
28 | | -- `x/y` — 矩形原点相对于窗口的 X/Y 坐标, |
29 | | -- `width/height` — 矩形的 width/height(可以为负)。 |
| 28 | +- `x/y` —— 矩形原点相对于窗口的 X/Y 坐标, |
| 29 | +- `width/height` —— 矩形的 width/height(可以为负)。 |
30 | 30 |
|
31 | 31 | 此外,还有派生(derived)属性: |
32 | 32 |
|
33 | | -- `top/bottom` — 顶部/底部矩形边缘的 Y 坐标, |
34 | | -- `left/right` — 左/右矩形边缘的 X 坐标。 |
| 33 | +- `top/bottom` —— 顶部/底部矩形边缘的 Y 坐标, |
| 34 | +- `left/right` —— 左/右矩形边缘的 X 坐标。 |
35 | 35 |
|
36 | 36 | ```online |
37 | 37 | 例如,点击下面这个按钮以查看其窗口坐标: |
@@ -247,8 +247,8 @@ function createMessageUnder(elem, html) { |
247 | 247 |
|
248 | 248 | 页面上的任何点都有坐标: |
249 | 249 |
|
250 | | -1. 相对于窗口的坐标 — `elem.getBoundingClientRect()`。 |
251 | | -2. 相对于文档的坐标 — `elem.getBoundingClientRect()` 加上当前页面滚动。 |
| 250 | +1. 相对于窗口的坐标 —— `elem.getBoundingClientRect()`。 |
| 251 | +2. 相对于文档的坐标 —— `elem.getBoundingClientRect()` 加上当前页面滚动。 |
252 | 252 |
|
253 | 253 | 窗口坐标非常适合和 `position:fixed` 一起使用,文档坐标非常适合和 `position:absolute` 一起使用。 |
254 | 254 |
|
|
0 commit comments