1
- 为小球设置 ` position:absolute ` 。这意味着它的 ` left/top ` 坐标根据相对它最近的并且设置了定位的元素来测量,这个元素的有效范围就是 ` #field ` (因为它有 ` position:relative ` )。
1
+ 小球具有 ` position:absolute ` 。这意味着它的 ` left/top ` 坐标是从最近的具有定位属性的元素开始测量的,这个元素即 ` #field ` (因为它有 ` position:relative ` )。
2
2
3
- 坐标从设置了相对定位的最近的元素的左上角开始 :
3
+ 坐标从场(field)的左上角内侧开始 :
4
4
5
5
![ ] ( field.svg )
6
6
7
- 该元素内容区域的宽/高是 ` clientWidth/clientHeight ` ,所以该元素有效范围的中心的坐标为 ` (clientWidth/2, clientHeight/2) ` 。
7
+ 内部的场(field)的 width/height 是 ` clientWidth/clientHeight ` 。所以场(field)的中心坐标为 ` (clientWidth/2, clientHeight/2) ` 。
8
8
9
- ...不过如果我们将 ` ball.style.left/top ` 设置为上面计算出的值,那么最终的效果与有效范围的中心重合的不是小球的中心,而是小球左上角的坐标 :
9
+ ……但是,如果我们将 ` ball.style.left/top ` 设置为这种值,那么在中心的会是球的左上边缘,而不是整个球 :
10
10
11
11
``` js
12
12
ball .style .left = Math .round (field .clientWidth / 2 ) + ' px' ;
13
13
ball .style .top = Math .round (field .clientHeight / 2 ) + ' px' ;
14
14
```
15
15
16
- 这是它将显示出的效果 :
16
+ 这是它将显示出来的效果 :
17
17
18
18
[ iframe height=180 src="ball-half"]
19
19
20
- 为了把球中心和有效范围中心对准,我们应该把球移到左边宽度的一半,把 top 设置为有效范围高度的一半 :
20
+ 为了使球的中心与场(field)的中心重合,我们应该把球向左移动球宽度的一半,并向上移动球高度的一半 :
21
21
22
22
``` js
23
23
ball .style .left = Math .round (field .clientWidth / 2 - ball .offsetWidth / 2 ) + ' px' ;
@@ -26,25 +26,23 @@ ball.style.top = Math.round(field.clientHeight / 2 - ball.offsetHeight / 2) + 'p
26
26
27
27
** 注意:陷阱!**
28
28
29
- 如果 ` <img> ` 没有宽/高,代码将无法正常工作 :
29
+ 当 ` <img> ` 没有 width/height 时,代码将无法可靠地工作 :
30
30
31
31
``` html
32
32
<img src =" ball.png" id =" ball" >
33
33
```
34
34
35
- 当浏览器还不知道图片的宽/高(图片的尺寸可能来自标签属性或 CSS)的时候它会假设它们的尺寸为 ` 0 ` 直到图片加载完成。
35
+ 当浏览器不知道图片的 width/height(通过标签 attribute 或 CSS)时,它会假定它们等于 ` 0 ` , 直到图片加载完成。
36
36
37
- 实际使用过程中,浏览器会在图片第一次加载完成后缓存该图片,方便下次再次访问时立即显示图片 。
37
+ 但在实际中,第一次加载后,浏览器通常会缓存该图片,并在下一次加载时,浏览器会立即拥有该图片的大小。但是在第一次加载时, ` ball.offsetWidth ` 的值为 ` 0 ` ,这会导致错误的坐标 。
38
38
39
- 但是在第一次加载时 ` ball.offsetWidth ` 的值为 ` 0 ` ,这会导致错误的坐标出现。
40
-
41
- 此时我们应该为 ` <img> ` 添加 ` width/height ` 属性:
39
+ 我们应该通过在 ` <img> ` 中添加 ` width/height ` 来解决这个问题:
42
40
43
41
``` html
44
42
<img src =" ball.png" *!*width =" 40" height =" 40" * /!* id =" ball" >
45
43
```
46
44
47
- ... 或者在 CSS 中提供尺寸 :
45
+ …… 或者在 CSS 中提供大小 :
48
46
49
47
``` css
50
48
#ball {
0 commit comments