` 在我们点击该按钮时消失。
示例:
diff --git a/2-ui/2-events/01-introduction-browser-events/02-hide-self-onclick/solution.md b/2-ui/2-events/01-introduction-browser-events/02-hide-self-onclick/solution.md
index c9fa4993f9..ff6d483b44 100644
--- a/2-ui/2-events/01-introduction-browser-events/02-hide-self-onclick/solution.md
+++ b/2-ui/2-events/01-introduction-browser-events/02-hide-self-onclick/solution.md
@@ -1,4 +1,4 @@
-可以在处理器中使用 `this` 来引用自身:
+可以在处理程序中使用 `this` 来引用“元素自身”:
```html run height=50
diff --git a/2-ui/2-events/01-introduction-browser-events/02-hide-self-onclick/task.md b/2-ui/2-events/01-introduction-browser-events/02-hide-self-onclick/task.md
index f02ff6ea24..b914e5178c 100644
--- a/2-ui/2-events/01-introduction-browser-events/02-hide-self-onclick/task.md
+++ b/2-ui/2-events/01-introduction-browser-events/02-hide-self-onclick/task.md
@@ -4,7 +4,7 @@ importance: 5
# 隐藏自己
-创建一个按钮,在单击时,隐藏自己。
+创建一个按钮,在被单击时,隐藏自己。
```online
就像这样:
diff --git a/2-ui/2-events/01-introduction-browser-events/03-which-handlers-run/solution.md b/2-ui/2-events/01-introduction-browser-events/03-which-handlers-run/solution.md
index a484489f2a..2b4a836a98 100644
--- a/2-ui/2-events/01-introduction-browser-events/03-which-handlers-run/solution.md
+++ b/2-ui/2-events/01-introduction-browser-events/03-which-handlers-run/solution.md
@@ -1,8 +1,8 @@
答案:`1` 和 `2`。
-第一个处理器会触发,因为它没有被 `removeEventListener` 移除。要移除处理器,我们需要传递正确分发的函数。在代码中,传递了一个新的函数,看起来相同,但仍然是另一个函数。
+第一个处理程序会触发,因为它没有被 `removeEventListener` 移除。要移除处理程序,我们需要传递正确的所分配的函数。在代码中,传递了一个新的函数,该函数看起来相同,但仍然是另一个函数。
-要移除函数对象,我们需要存储对它的引用,就像这样:
+要移除一个函数对象,我们需要存储对它的引用,像这样:
```js
function handler() {
@@ -13,4 +13,4 @@ button.addEventListener("click", handler);
button.removeEventListener("click", handler);
```
-处理器 `button.onclick` 独立于 `addEventListener` 之外工作。
+无论 `addEventListener` 怎样,`button.onclick` 处理程序都会触发。
diff --git a/2-ui/2-events/01-introduction-browser-events/03-which-handlers-run/task.md b/2-ui/2-events/01-introduction-browser-events/03-which-handlers-run/task.md
index ab20c3874b..63b190801f 100644
--- a/2-ui/2-events/01-introduction-browser-events/03-which-handlers-run/task.md
+++ b/2-ui/2-events/01-introduction-browser-events/03-which-handlers-run/task.md
@@ -2,11 +2,11 @@ importance: 5
---
-# 哪一个处理器会运行?
+# 哪个处理程序会运行?
-变量中有一个按钮,上面没有处理器。
+在变量中有一个按钮。它上面没有处理程序。
-在下面代码之后单击哪些处理器会运行?会出现哪些警报?
+执行以下代码之后,哪些处理程序会在按钮被点击时运行?会显示哪些 alert?
```js no-beautify
button.addEventListener("click", () => alert("1"));
diff --git a/2-ui/2-events/01-introduction-browser-events/04-move-ball-field/solution.md b/2-ui/2-events/01-introduction-browser-events/04-move-ball-field/solution.md
index 9c152278c5..1d68516ec8 100644
--- a/2-ui/2-events/01-introduction-browser-events/04-move-ball-field/solution.md
+++ b/2-ui/2-events/01-introduction-browser-events/04-move-ball-field/solution.md
@@ -1,11 +1,11 @@
-首先我们需要选择一种定位球的方法。
+首先,我们需要选择一种定位球的方法。
-我们不能使用 `position:fixed`,因为滑动页面会让球在球场上移动。
+我们不能使用 `position:fixed`,因为滚动页面会造成球被移出球场。
-因此我们应该使用 `position:absolute`,并使定位稳定,让 `field` 自身定位。
+所以我们应该使用 `position:absolute`,并且要使定位真正可靠,应该使 `field` 自身具有 `position:absolute`。
-然后球会相对于球场定位:
+然后,球将相对于球场定位:
```css
#field {
@@ -16,36 +16,36 @@
#ball {
position: absolute;
- left: 0; /* 相对于最近位置的祖先(字段) */
+ left: 0; /* 相对于最接近的祖先(field) */
top: 0;
- transition: 1s all; /* 在左上方的 CSS 特效会让球飞起来 */
+ transition: 1s all; /* left/top 的 CSS 动画,使球飞起来 */
}
```
-接下来我们需要指定正确的 `ball.style.position.left/top`。它们现在包含球场的相对坐标。
+接下来我们需要指定正确的 `ball.style.left/top`。它们现在包含相对于球场的坐标。
-这是图片:
+这是示意图:

-我们有 `event.clientX/clientY`—— 单击窗口时的相对坐标。
+我们有 `event.clientX/clientY` —— 单击位置的窗口相对坐标。
-要获取单击字段的相对 `left` 坐标,我们可以减去字段的左边缘和边框宽度:
+要获取单击位置的球场相对坐标 `left`,我们可以减去球场左边缘和边框的宽度:
```js
-let left = event.clientX - fieldInnerCoords.left - field.clientLeft;
+let left = event.clientX - fieldCoords.left - field.clientLeft;
```
-通常情况下,`ball.style.position.left` 是指“元素的左边缘”(球)。因此,如果我们指定 `left`,那么球的边缘就会在鼠标光标下面。
+通常情况下,`ball.style.left` 表示“元素的左边缘”(球)。因此,如果我们将其指定为 `left`,那么球的边缘而非球的中心将位于鼠标光标下方。
-我们需要将球向左移动宽度的一半,向上移动高度的一半,使其居中。
+我们需要将球向左移动球宽度的一半,向上移动球高度的一半,以使其居中。
-因此,最后 `left` 是:
+所以,最后的 `left` 将是:
```js
-let left = event.clientX - fieldInnerCoords.left - field.clientLeft - ball.offsetWidth/2;
+let left = event.clientX - fieldCoords.left - field.clientLeft - ball.offsetWidth/2;
```
-使用相同的逻辑计算垂直坐标。
+使用相同的逻辑来计算垂直坐标。
-请注意,球的宽度/高度必须在我们设置 `ball.offsetWidth` 时就已知。应该在 HTML 或 CSS 中指定。
+请注意,球的宽度/高度必须在我们访问 `ball.offsetWidth` 时就已知。应该在 HTML 或 CSS 中指定。
diff --git a/2-ui/2-events/01-introduction-browser-events/04-move-ball-field/task.md b/2-ui/2-events/01-introduction-browser-events/04-move-ball-field/task.md
index a4088783a4..bb7469706f 100644
--- a/2-ui/2-events/01-introduction-browser-events/04-move-ball-field/task.md
+++ b/2-ui/2-events/01-introduction-browser-events/04-move-ball-field/task.md
@@ -4,18 +4,18 @@ importance: 5
# 让球在球场中移动
-单击一下让球在球场中移动。就像这样:
+单击球场中任意一点,让球在球场中移动。就像这样:
[iframe src="solution" height="260" link]
要求:
-- 球的中心应该准确的在单击时指针位置的下方(如果可能的话,不越过球场边缘)。
-- CSS 动画很受欢迎。
+- 球的中心应该恰好在单击时指针位置的下方(如果在球不越过球场边缘的情况下,能实现的话)。
+- 最好添加一些 CSS 动画。
- 球不能越过场地边界。
-- 当页面被滚动时,任何东西都不应该中断。
+- 页面滚动时,不会有任何中断。
注意:
-- 代码还应该能在不同的球和球场大小中工作,而不是绑定到任何固定的值。
+- 代码还应该适用于不同大小的球和球场,而不应该绑定到任何固定值。
- 使用 `event.clientX/event.clientY` 属性来获取点击坐标。
diff --git a/2-ui/2-events/01-introduction-browser-events/05-sliding-menu/solution.md b/2-ui/2-events/01-introduction-browser-events/05-sliding-menu/solution.md
index 8a7bc1ad57..ac939abee3 100644
--- a/2-ui/2-events/01-introduction-browser-events/05-sliding-menu/solution.md
+++ b/2-ui/2-events/01-introduction-browser-events/05-sliding-menu/solution.md
@@ -1,12 +1,13 @@
# HTML/CSS
-首先,我们创建 HTML/CSS。
-菜单是页面上的一个独立的图形组件,所以最好把它放在一个 DOM 元素中。
+首先,让我们创建 HTML/CSS。
-菜单项列表可以分层为列表 `ul/li`。
+菜单是页面上的一个独立图形组件,所以最好把它放入一个单独的 DOM 元素中。
-下面是示例的结构:
+菜单项的列表可以被作为列表 `ul/li` 列出。
+
+下面是示例结构:
```html
```
-我们的标题使用 `
`,因为 `` 有一个隐式的 `display:block`,它会 100% 的占据水平宽度。
+我们对标题使用 `
`,因为 `` 有一个隐式的 `display:block`,它会占据 100% 的水平宽度。
就像这样:
@@ -27,21 +28,21 @@
Sweeties (click me)!
```
-因此如果我们在它上面设置 `onclick`,就会在文本的右边捕获点击事件。
+因此,如果我们在它上面设置 `onclick`,那么它也会捕获文本右侧的点击。
-...但 `
` 有一个隐式 `display: inline`,因此它会占据足够的位置来适应所有的文本:
+……由于 `` 有一个隐式的 `display: inline`,它恰好占据了足以容纳所有文本的位置:
```html autorun height=50
Sweeties (click me)!
```
- # 切换菜单
+# 切换菜单
切换菜单应更改箭头并显示/隐藏菜单列表。
-所以这些更改都能被 CSS 完美处理。在 JavaScript 中,我们应该通过添加/移除 `.open` 类来标记菜单的当前状态。
+所有这些更改都可以通过 CSS 完美处理。在 JavaScript 中,我们应该通过添加/移除 `.open` 类来标记菜单的当前状态。
-没有它,菜单就会关闭:
+没有它,菜单就会被关闭:
```css
.menu ul {
@@ -58,7 +59,7 @@
}
```
-...使用 `.open` 后,箭头会改变,列表会出现:
+……有 `.open` 后,箭头会改变,列表会出现:
```css
.menu.open .title::before {
diff --git a/2-ui/2-events/01-introduction-browser-events/06-hide-message/solution.md b/2-ui/2-events/01-introduction-browser-events/06-hide-message/solution.md
index a4709c4cab..cb30b86e06 100644
--- a/2-ui/2-events/01-introduction-browser-events/06-hide-message/solution.md
+++ b/2-ui/2-events/01-introduction-browser-events/06-hide-message/solution.md
@@ -1,12 +1,12 @@
-我们可以使用 `position:absolute`(使 pane `position:relative`)或者 `float:right` 来添加按钮。`float:right` 的好处是按钮永远都不会重叠文本,但是 `position:absolute` 有更多的灵活性,选择权在你手上。
+我们可以使用 `position:absolute`(并使窗格 `position:relative`)或者 `float:right` 来添加按钮。`float:right` 的好处是按钮永远都不会与文本重叠,但是 `position:absolute` 则提供了更大的自由度。选择权在你自己手上。
-然后对于每个 pane 来说,代码都是如此:
+然后,对于每个窗格(pane),代码可以像这样:
```js
pane.insertAdjacentHTML("afterbegin", '');
```
-然后 `