` 내부에서 발생한 마우스 이동에 관한 어떠한 정보도 알 수 없습니다.
-So, let's use `mouseover/mouseout`.
+그러니 여기서는 `mouseover/mouseout` 이벤트를 사용해 보겠습니다.
-Let's start with simple handlers that highlight the element under mouse:
+마우스 아래에 있는 요소를 강조하는 단순한 이벤트 핸들러부터 사용해 보겠습니다.
```js
-// let's highlight an element under the pointer
-table.onmouseover = function(event) {
+// 마우스 아래 요소를 강조합니다.
+table.onmouseover = function (event) {
let target = event.target;
target.style.background = 'pink';
};
-table.onmouseout = function(event) {
+table.onmouseout = function (event) {
let target = event.target;
target.style.background = '';
};
```
```online
-Here they are in action. As the mouse travels across the elements of this table, the current one is highlighted:
+아래 예시에서 두 개의 이벤트가 동작하는 것을 확인할 수 있습니다. 마우스가 테이블 내부 요소들 사이를 이동함에 따라 현재 마우스가 위치한 요소가 강조됩니다.
[codetabs height=480 src="mouseenter-mouseleave-delegation"]
```
-In our case we'd like to handle transitions between table cells ``: entering a cell and leaving it. Other transitions, such as inside the cell or outside of any cells, don't interest us. Let's filter them out.
+우리는 테이블 셀인 ` | `에 마우스가 들어가고 나오는 것을 이벤트 핸들러로 관리하고 싶습니다. 셀 내부에서의 이동 또는 셀 밖으로의 이동에는 관심이 없습니다. 그러니 위 코드를 고쳐보겠습니다.
-Here's what we can do:
+아래 방식을 적용해 볼 수 있습니다.
-- Remember the currently highlighted ` | ` in a variable, let's call it `currentElem`.
-- On `mouseover` -- ignore the event if we're still inside the current ` | `.
-- On `mouseout` -- ignore if we didn't leave the current ` | `.
+- 현재 강조된 ` | `를 변수에 저장하고, 이 변수를 `currentElem`로 명명합니다.
+- 만약 마우스가 여전히 `currentElem` 위에 있다면 `mouseover` 이벤트를 무시합니다.
+- 만약 마우스가 `currentElem`를 떠나지 않았다면 `mouseout` 이벤트를 무시합니다.
-Here's an example of code that accounts for all possible situations:
+아래는 모든 발생 가능한 상황을 고려한 코드 작성 예시입니다.
[js src="mouseenter-mouseleave-delegation-2/script.js"]
-Once again, the important features are:
-1. It uses event delegation to handle entering/leaving of any ` | ` inside the table. So it relies on `mouseover/out` instead of `mouseenter/leave` that don't bubble and hence allow no delegation.
-2. Extra events, such as moving between descendants of ` | ` are filtered out, so that `onEnter/Leave` runs only if the pointer leaves or enters ` | ` as a whole.
+위 코드에서 중요한 점을 다시 한 번 말씀드리겠습니다.
+
+1. 테이블 내부의 ` | `를 방문하고 떠나는 것을 관리하기 위해 이벤트 위임을 사용했습니다. 이를 위해 이벤트 버블링이 발생하지 않음에 따라 이벤트 위임을 사용할 수 없는 `mouseenter/leave` 이벤트 대신에 `mouseover/out` 이벤트를 사용했습니다.
+2. ` | `의 자식 요소들 사이에서 발생하는 이벤트와 같은 기타 이벤트들을 걸러냄으로써 `onEnter/Leave` 함수가 다른 ` | ` 요소에 방문하거나 해당 요소를 완전히 떠나는 경우에만 발동하도록 했습니다.
```online
-Here's the full example with all details:
+아래는 모든 상세 사항이 적용된 예시입니다.
[codetabs height=460 src="mouseenter-mouseleave-delegation-2"]
-Try to move the cursor in and out of table cells and inside them. Fast or slow -- doesn't matter. Only ` | ` as a whole is highlighted, unlike the example before.
+마우스를 테이블 셀의 안과 바깥으로 또는 셀 안에서 이동시켜 보세요. 속도는 상관 없습니다. 이전의 예시와 다르게 오직 ` | `만 강조됩니다.
```
-## Summary
+## 요약
-We covered events `mouseover`, `mouseout`, `mousemove`, `mouseenter` and `mouseleave`.
+우리는 `mouseover`, `mouseout`, `mousemove`, `mouseenter` 그리고 `mouseleave` 이벤트를 다루었습니다.
-These things are good to note:
+아래 사항들을 기억해 두세요.
-- A fast mouse move may skip intermediate elements.
-- Events `mouseover/out` and `mouseenter/leave` have an additional property: `relatedTarget`. That's the element that we are coming from/to, complementary to `target`.
+- 빠른 마우스 움직임은 마우스 이동 경로 상의 요소들을 건너뛸 수도 있습니다.
+- `mouseover/out`와 `mouseenter/leave` 이벤트는 `relatedTarget` 프로퍼티를 추가로 가지고 있습니다. 이 프로퍼티는 마우스가 어느 요소에서 왔는지 또는 어느 요소로 떠나왔는지를 나타냄으로써 `target` 프로퍼티를 보완하는 역할을 합니다.
-Events `mouseover/out` trigger even when we go from the parent element to a child element. The browser assumes that the mouse can be only over one element at one time -- the deepest one.
+`mouseover/out` 이벤트는 부모 요소에서 자식 요소로 이동할 때도 발생합니다. 브라우저는 마우스가 가장 안쪽에 있는 한 개의 요소 위에만 위치할 수 있다고 가정합니다.
-Events `mouseenter/leave` are different in that aspect: they only trigger when the mouse comes in and out the element as a whole. Also they do not bubble.
+`mouseenter/leave` 이벤트는 위와는 다르게 마우스가 자식 요소가 아닌 완전히 다른 요소로 들어오거나 특정 요소에서 완전히 빠져나왔을 때만 발생합니다. 그리고 버블링 이벤트를 발생시키지 않습니다.
diff --git a/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseenter-mouseleave-delegation-2.view/script.js b/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseenter-mouseleave-delegation-2.view/script.js
index 6a3202467e..cbd4f87fb5 100755
--- a/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseenter-mouseleave-delegation-2.view/script.js
+++ b/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseenter-mouseleave-delegation-2.view/script.js
@@ -1,54 +1,53 @@
-// | under the mouse right now (if any)
+// 만약 현재 마우스 아래에 | 가 존재하는 경우 해당 요소 입력
let currentElem = null;
table.onmouseover = function(event) {
- // before entering a new element, the mouse always leaves the previous one
- // if currentElem is set, we didn't leave the previous | ,
- // that's a mouseover inside it, ignore the event
+ // 새로운 요소로 들어가기 전에 마우스는 항상 이전 요소를 떠납니다.
+ // 만약 currentElem가 null이 아니라면 이전에 방문한 | 를 떠나지 않았다는 뜻입니다.
+ // 현재 발생한 이벤트는 해당 | 의 내부에서 발생했다는 의미이므로 무시합니다.
if (currentElem) return;
let target = event.target.closest('td');
- // we moved not into a | - ignore
+ // 마우스가 | 가 아닌 다른 요소로 이동했으므로 무시합니다.
if (!target) return;
- // moved into | , but outside of our table (possible in case of nested tables)
- // ignore
+ // 마우스가 | 로 이동했으나 관심 테이블이 아닙니다(중첩 테이블인 경우 발생 가능합니다).
+ // 따라서 무시합니다.
if (!table.contains(target)) return;
- // hooray! we entered a new |
+ // 만세! 우리는 새로운 | 로 이동했습니다.
currentElem = target;
onEnter(currentElem);
};
-
table.onmouseout = function(event) {
- // if we're outside of any | now, then ignore the event
- // that's probably a move inside the table, but out of | ,
- // e.g. from | to another
+ // 만약 마우스가 밖에 있다면 현재 이벤트를 무시합니다.
+ // 테이블 내부를 이동하는 과정에서 | 와 관계없이 발생한 이벤트일 수 있습니다.
+ // 예시, 한 |
에서 다른
로 이동하는 경우
if (!currentElem) return;
- // we're leaving the element – where to? Maybe to a descendant?
+ // 마우스가 기존에 있던 요소를 떠났습니다. 어디로 갔을까요? 자식 요소로 떠났을까요?
let relatedTarget = event.relatedTarget;
while (relatedTarget) {
- // go up the parent chain and check – if we're still inside currentElem
- // then that's an internal transition – ignore it
+ // 부모 노드를 타고 올라가면서 확인해봅시다.
+ // 만약 여전히 currentElem 내부라면 현재 이벤트를 무시합니다.
if (relatedTarget == currentElem) return;
relatedTarget = relatedTarget.parentNode;
}
- // we left the . really.
+ // 마우스가 currentElem를 떠났습니다. 정말로.
onLeave(currentElem);
currentElem = null;
};
-// any functions to handle entering/leaving an element
+// 요소를 방문하고 떠나는 것을 관리하기 위한 임의 함수입니다.
function onEnter(elem) {
elem.style.background = 'pink';
- // show that in textarea
+ // textarea에 표출합니다.
text.value += `over -> ${currentElem.tagName}.${currentElem.className}\n`;
text.scrollTop = 1e6;
}
@@ -56,7 +55,7 @@ function onEnter(elem) {
function onLeave(elem) {
elem.style.background = '';
- // show that in textarea
+ // textarea에 표출합니다.
text.value += `out <- ${elem.tagName}.${elem.className}\n`;
text.scrollTop = 1e6;
}
|