Skip to content

Commit af27aaa

Browse files
authored
Update translation of 2-ui/2-events/01-introduction-browser-events (#683)
Update translation of 2-ui/2-events/01-introduction-browser-events (#683)
1 parent 7940f2f commit af27aaa

File tree

13 files changed

+173
-186
lines changed

13 files changed

+173
-186
lines changed

2-ui/2-events/01-introduction-browser-events/01-hide-other/task.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ importance: 5
44

55
# 点击隐藏
66

7-
`button` 添加 JavaScript ,使我们在点击的时候让 `<div id="text">` 消失
7+
`button` 添加 JavaScript 代码,使得 `<div id="text">` 在我们点击该按钮时消失
88

99
示例:
1010

2-ui/2-events/01-introduction-browser-events/02-hide-self-onclick/solution.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
可以在处理器中使用 `this` 来引用自身
1+
可以在处理程序中使用 `this` 来引用“元素自身”
22

33
```html run height=50
44
<input type="button" onclick="this.hidden=true" value="Click to hide">

2-ui/2-events/01-introduction-browser-events/02-hide-self-onclick/task.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ importance: 5
44

55
# 隐藏自己
66

7-
创建一个按钮,在单击时,隐藏自己。
7+
创建一个按钮,在被单击时,隐藏自己。
88

99
```online
1010
就像这样:
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
答案:`1``2`
22

3-
第一个处理器会触发,因为它没有被 `removeEventListener` 移除。要移除处理器,我们需要传递正确分发的函数。在代码中,传递了一个新的函数,看起来相同,但仍然是另一个函数。
3+
第一个处理程序会触发,因为它没有被 `removeEventListener` 移除。要移除处理程序,我们需要传递正确的所分配的函数。在代码中,传递了一个新的函数,该函数看起来相同,但仍然是另一个函数。
44

5-
要移除函数对象,我们需要存储对它的引用,就像这样
5+
要移除一个函数对象,我们需要存储对它的引用,像这样
66

77
```js
88
function handler() {
@@ -13,4 +13,4 @@ button.addEventListener("click", handler);
1313
button.removeEventListener("click", handler);
1414
```
1515

16-
处理器 `button.onclick` 独立于 `addEventListener` 之外工作
16+
无论 `addEventListener` 怎样,`button.onclick` 处理程序都会触发

2-ui/2-events/01-introduction-browser-events/03-which-handlers-run/task.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ importance: 5
22

33
---
44

5-
# 哪一个处理器会运行
5+
# 哪个处理程序会运行
66

7-
变量中有一个按钮,上面没有处理器
7+
在变量中有一个按钮。它上面没有处理程序
88

9-
在下面代码之后单击哪些处理器会运行?会出现哪些警报
9+
执行以下代码之后,哪些处理程序会在按钮被点击时运行?会显示哪些 alert
1010

1111
```js no-beautify
1212
button.addEventListener("click", () => alert("1"));
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11

2-
首先我们需要选择一种定位球的方法
2+
首先,我们需要选择一种定位球的方法
33

4-
我们不能使用 `position:fixed`因为滑动页面会让球在球场上移动
4+
我们不能使用 `position:fixed`因为滚动页面会造成球被移出球场
55

6-
因此我们应该使用 `position:absolute`并使定位稳定,让 `field` 自身定位
6+
所以我们应该使用 `position:absolute`并且要使定位真正可靠,应该使 `field` 自身具有 `position:absolute`
77

8-
然后球会相对于球场定位
8+
然后,球将相对于球场定位
99

1010
```css
1111
#field {
@@ -16,36 +16,36 @@
1616

1717
#ball {
1818
position: absolute;
19-
left: 0; /* 相对于最近位置的祖先(字段*/
19+
left: 0; /* 相对于最接近的祖先(field*/
2020
top: 0;
21-
transition: 1s all; /* 在左上方的 CSS 特效会让球飞起来 */
21+
transition: 1s all; /* left/top 的 CSS 动画,使球飞起来 */
2222
}
2323
```
2424

25-
接下来我们需要指定正确的 `ball.style.position.left/top`它们现在包含球场的相对坐标
25+
接下来我们需要指定正确的 `ball.style.left/top`它们现在包含相对于球场的坐标
2626

27-
这是图片
27+
这是示意图
2828

2929
![](move-ball-coords.svg)
3030

31-
我们有 `event.clientX/clientY`—— 单击窗口时的相对坐标
31+
我们有 `event.clientX/clientY` —— 单击位置的窗口相对坐标
3232

33-
要获取单击字段的相对 `left` 坐标,我们可以减去字段的左边缘和边框宽度
33+
要获取单击位置的球场相对坐标 `left`,我们可以减去球场左边缘和边框的宽度
3434

3535
```js
36-
let left = event.clientX - fieldInnerCoords.left - field.clientLeft;
36+
let left = event.clientX - fieldCoords.left - field.clientLeft;
3737
```
3838

39-
通常情况下,`ball.style.position.left` 是指“元素的左边缘”(球)。因此,如果我们指定 `left`那么球的边缘就会在鼠标光标下面
39+
通常情况下,`ball.style.left` 表示“元素的左边缘”(球)。因此,如果我们将其指定为 `left`那么球的边缘而非球的中心将位于鼠标光标下方
4040

41-
我们需要将球向左移动宽度的一半,向上移动高度的一半,使其居中
41+
我们需要将球向左移动球宽度的一半,向上移动球高度的一半,以使其居中
4242

43-
因此,最后 `left`
43+
所以,最后的 `left` 将是
4444

4545
```js
46-
let left = event.clientX - fieldInnerCoords.left - field.clientLeft - ball.offsetWidth/2;
46+
let left = event.clientX - fieldCoords.left - field.clientLeft - ball.offsetWidth/2;
4747
```
4848

49-
使用相同的逻辑计算垂直坐标
49+
使用相同的逻辑来计算垂直坐标
5050

51-
请注意,球的宽度/高度必须在我们设置 `ball.offsetWidth` 时就已知。应该在 HTML 或 CSS 中指定。
51+
请注意,球的宽度/高度必须在我们访问 `ball.offsetWidth` 时就已知。应该在 HTML 或 CSS 中指定。

2-ui/2-events/01-introduction-browser-events/04-move-ball-field/task.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,18 @@ importance: 5
44

55
# 让球在球场中移动
66

7-
单击一下让球在球场中移动。就像这样:
7+
单击球场中任意一点,让球在球场中移动。就像这样:
88

99
[iframe src="solution" height="260" link]
1010

1111
要求:
1212

13-
- 球的中心应该准确的在单击时指针位置的下方(如果可能的话,不越过球场边缘)
14-
- CSS 动画很受欢迎
13+
- 球的中心应该恰好在单击时指针位置的下方(如果在球不越过球场边缘的情况下,能实现的话)
14+
- 最好添加一些 CSS 动画
1515
- 球不能越过场地边界。
16-
- 当页面被滚动时,任何东西都不应该中断
16+
- 页面滚动时,不会有任何中断
1717

1818
注意:
1919

20-
- 代码还应该能在不同的球和球场大小中工作,而不是绑定到任何固定的值
20+
- 代码还应该适用于不同大小的球和球场,而不应该绑定到任何固定值
2121
- 使用 `event.clientX/event.clientY` 属性来获取点击坐标。

2-ui/2-events/01-introduction-browser-events/05-sliding-menu/solution.md

+12-11
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11

22
# HTML/CSS
3-
首先,我们创建 HTML/CSS。
43

5-
菜单是页面上的一个独立的图形组件,所以最好把它放在一个 DOM 元素中
4+
首先,让我们创建 HTML/CSS
65

7-
菜单项列表可以分层为列表 `ul/li`
6+
菜单是页面上的一个独立图形组件,所以最好把它放入一个单独的 DOM 元素中
87

9-
下面是示例的结构:
8+
菜单项的列表可以被作为列表 `ul/li` 列出。
9+
10+
下面是示例结构:
1011

1112
```html
1213
<div class="menu">
@@ -19,29 +20,29 @@
1920
</div>
2021
```
2122

22-
我们的标题使用 `<span>`,因为 `<div>` 有一个隐式的 `display:block`它会 100% 的占据水平宽度
23+
我们对标题使用 `<span>`,因为 `<div>` 有一个隐式的 `display:block`它会占据 100% 的水平宽度
2324

2425
就像这样:
2526

2627
```html autorun height=50
2728
<div style="border: solid red 1px" onclick="alert(1)">Sweeties (click me)!</div>
2829
```
2930

30-
因此如果我们在它上面设置 `onclick`就会在文本的右边捕获点击事件
31+
因此,如果我们在它上面设置 `onclick`那么它也会捕获文本右侧的点击
3132

32-
...但 `<span>` 有一个隐式 `display: inline`因此它会占据足够的位置来适应所有的文本
33+
……由于 `<span>` 有一个隐式的 `display: inline`它恰好占据了足以容纳所有文本的位置
3334

3435
```html autorun height=50
3536
<span style="border: solid red 1px" onclick="alert(1)">Sweeties (click me)!</span>
3637
```
3738

38-
# 切换菜单
39+
# 切换菜单
3940

4041
切换菜单应更改箭头并显示/隐藏菜单列表。
4142

42-
所以这些更改都能被 CSS 完美处理。在 JavaScript 中,我们应该通过添加/移除 `.open` 类来标记菜单的当前状态。
43+
所有这些更改都可以通过 CSS 完美处理。在 JavaScript 中,我们应该通过添加/移除 `.open` 类来标记菜单的当前状态。
4344

44-
没有它,菜单就会关闭
45+
没有它,菜单就会被关闭
4546

4647
```css
4748
.menu ul {
@@ -58,7 +59,7 @@
5859
}
5960
```
6061

61-
...使用 `.open` 后,箭头会改变,列表会出现:
62+
……有 `.open` 后,箭头会改变,列表会出现:
6263

6364
```css
6465
.menu.open .title::before {

2-ui/2-events/01-introduction-browser-events/06-hide-message/solution.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11

2-
我们可以使用 `position:absolute`使 pane `position:relative`)或者 `float:right` 来添加按钮。`float:right` 的好处是按钮永远都不会重叠文本,但是 `position:absolute` 有更多的灵活性,选择权在你手上
2+
我们可以使用 `position:absolute`并使窗格 `position:relative`)或者 `float:right` 来添加按钮。`float:right` 的好处是按钮永远都不会与文本重叠,但是 `position:absolute` 则提供了更大的自由度。选择权在你自己手上
33

4-
然后对于每个 pane 来说,代码都是如此
4+
然后,对于每个窗格(pane),代码可以像这样
55
```js
66
pane.insertAdjacentHTML("afterbegin", '<button class="remove-button">[x]</button>');
77
```
88

9-
然后 `<button>` 变成了 `pane.firstChild`因此我们可以像这样为它添加处理器
9+
然后 `<button>` 变成了 `pane.firstChild`因此我们可以像这样为它添加处理程序
1010

1111
```js
1212
pane.firstChild.onclick = () => pane.remove();

2-ui/2-events/01-introduction-browser-events/06-hide-message/task.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ importance: 5
44

55
# 添加关闭按钮
66

7-
有一张消息列表
7+
有一个消息列表
88

9-
使用 JavaScript 在每条消息的右上角都添加一个按钮
9+
使用 JavaScript 在每条消息的右上角添加一个关闭按钮
1010

1111
结果应该如下所示:
1212

Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
图像带可以表示为 `ul/li` 图像列表 `<img>`
1+
图像带可以表示为图像 `<img>``ul/li` 列表
22

3-
通常情况下,这样的带是很宽的,但我们还是在其周围设置了一个固定大小的 `<div>` 来“剪切”它,因此只会有一部分带是可见的
3+
通常,这样的图像带是很宽的,但我们在其周围放置了一个固定大小的 `<div>` 来“剪切”它,因此,只有图像带的一部分是可见的
44

55
![](carousel1.svg)
66

7-
为了使列表水平显示,我们需要为 `<li>` 应用正确的 CSS 属性,比如 `display: inline-block`
7+
为了使列表水平显示,我们需要为 `<li>` 应用正确的 CSS 属性,例如 `display: inline-block`
88

9-
对于 `<img>` 来说,我们应该调整 `display`,因为默认情况下它是 `inline`由于在 `inline` 元素下方具有 "letter tails" 而存在额外空间,所以我们可以使用 `display:block` 来移除多余的空间
9+
对于 `<img>` 来说,我们应该调整 `display`,因为默认情况下它是 `inline` `inline` 元素下方为 "letter tails" 保留了额外的空间,因此,我们可以使用 `display:block` 来将其删除
1010

11-
我们可以移动 `<ul>` 来进行滚动。有很多方法都可以实现这一点,比如通过修改 `margin-left` 或者(性能更好)使用 `transform: translateX()`
11+
我们可以移动 `<ul>` 来进行滚动。有很多方法可以实现这一点,例如,通过修改 `margin-left` 或者使用 `transform: translateX()`(性能更好)
1212

1313
![](carousel2.svg)
1414

15-
外部 `<div>` 具有固定的宽度,因此,"extra" 图像可以被剪切
15+
外部的 `<div>` 具有固定的宽度,因此,会裁剪掉“多余”的图像
1616

17-
整个 carousel 是页面是一个自包含的 "graphical component",因为我们最好将其封装成一个单独的 `<div class="carousel">`,并对其设置样式
17+
整个轮播图是页面上的一个独立的“图形组件”,因此我们最好将其包装到一个单独的 `<div class="carousel">` 中,并在其中对其进行样式设置

2-ui/2-events/01-introduction-browser-events/07-carousel/task.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ importance: 4
22

33
---
44

5-
# Carousel
5+
# 轮播图
66

7-
创建一个 "carousel" —— 一条可以通过点击箭头滚动的图像带
7+
创建一个“轮播图(carousel)” —— 一条可以通过点击箭头来滚动图像的图像带
88

99
[iframe height=200 src="solution"]
1010

11-
以后,我们可以添加更多的功能:无限滚动,动态加载等。
11+
之后,我们可以为其添加更多功能:无限滚动,动态加载等。
1212

13-
P.S. 对这个任务来说,HTML/CSS 占解决方案的 90%。
13+
P.S. 对于这个任务,HTML/CSS 结构实际上占解决方案的 90%。

0 commit comments

Comments
 (0)