You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 2-ui/3-event-details/6-pointer-events/article.md
+17-17Lines changed: 17 additions & 17 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,23 +4,23 @@
4
4
5
5
## 간략한 역사
6
6
7
-
포인터 이벤트가 다른 이벤트 유형 사이에서 어떤 위치에 있는지 전체 그림을 이해할 수 있도록 간략히 살펴보겠습니다.
7
+
포인터 이벤트가 다른 이벤트 유형 사이에서 어떤 위치에 있는지 이해할 수 있도록 간략히 살펴보겠습니다.
8
8
9
9
- 오래전에는 마우스 이벤트만 있었습니다.
10
10
11
11
그러다 터치 기기, 특히 휴대 전화와 태블릿이 널리 보급되었습니다. 기존 스크립트가 동작하도록 터치 기기는 마우스 이벤트를 생성했고 지금도 생성합니다. 예를 들어 터치스크린을 탭 하면 `mousedown`이 발생합니다. 덕분에 터치 기기는 웹 페이지와 잘 동작했습니다.
12
12
13
13
하지만 터치 기기는 마우스보다 더 많은 기능을 제공합니다. 예를 들어 여러 지점을 동시에 터치하는 '멀티 터치'가 가능합니다. 하지만 마우스 이벤트에는 이런 멀티 터치를 처리하는 데 필요한 프로퍼티가 없습니다.
14
14
15
-
- 그래서 `touchstart`, `touchend`, `touchmove`처럼 터치에 특화된 프로퍼티를 가진 터치 이벤트가 도입되었습니다. 포인터 이벤트가 더 나은 방식이므로 여기서는 자세히 다루지 않겠습니다.
15
+
- 그래서 `touchstart`, `touchend`, `touchmove`처럼 터치에 특화된 프로퍼티를 가진 터치 이벤트가 도입되었습니다. 포인터 이벤트가 더 나은 대안이므로 여기서는 자세히 다루지 않겠습니다.
16
16
17
17
하지만 그것만으로는 부족했습니다. 펜처럼 저마다 고유 기능을 가진 다른 기기도 많았기 때문입니다. 터치 이벤트와 마우스 이벤트를 모두 수신하는 코드를 작성하는 일도 번거로웠습니다.
18
18
19
19
- 이런 문제를 해결하기 위해 새로운 표준인 포인터 이벤트가 도입되었습니다. 포인터 이벤트는 모든 종류의 포인팅 기기에 대해 하나의 이벤트 집합을 제공합니다.
20
20
21
21
현재 [Pointer Events Level 2](https://www.w3.org/TR/pointerevents2/) 명세는 모든 주요 브라우저에서 지원됩니다. 더 최신 버전인 [Pointer Events Level 3](https://w3c.github.io/pointerevents/)는 작업 중이며 Pointer Events Level 2와 대부분 호환됩니다.
22
22
23
-
Internet Explorer 10이나 Safari 12 이하 같은 구형 브라우저를 지원해야 하는 경우가 아니라면, 이제 마우스 이벤트나 터치 이벤트를 사용할 이유가 없습니다. 포인터 이벤트로 전환하면 됩니다.
23
+
Internet Explorer 10이나 Safari 12 이하 같은 구형 브라우저를 지원해야 하는 경우가 아니라면 이제 마우스 이벤트나 터치 이벤트를 사용할 이유가 없습니다. 포인터 이벤트로 전환하면 됩니다.
24
24
25
25
그러면 터치 기기와 마우스 기기 모두에서 코드가 잘 동작합니다.
26
26
@@ -67,7 +67,7 @@ Internet Explorer 10이나 Safari 12 이하 같은 구형 브라우저를 지원
67
67
68
68
- `width` - 포인터, 예를 들어 손가락이 기기에 닿은 영역의 너비입니다. 마우스처럼 지원되지 않을 때는 항상 `1`입니다.
69
69
- `height` - 포인터가 기기에 닿은 영역의 높이입니다. 지원되지 않을 때는 항상 `1`입니다.
70
-
- `pressure` - 포인터 끝의 압력으로, 범위는 0부터 1까지입니다. 압력을 지원하지 않는 기기에서는 `0.5`(눌림) 또는 `0`이어야 합니다.
70
+
- `pressure` - 포인터 끝의 압력으로, 범위는 0부터 1까지입니다. 압력을 지원하지 않는 기기에서는 값이 `0.5`(눌림) 또는 `0`입니다.
71
71
- `tangentialPressure` - 정규화된 접선 방향 압력입니다.
72
72
- `tiltX`, `tiltY`, `twist` - 펜이 표면을 기준으로 어떻게 놓였는지 설명하는 펜 전용 프로퍼티입니다.
73
73
@@ -79,7 +79,7 @@ Internet Explorer 10이나 Safari 12 이하 같은 구형 브라우저를 지원
79
79
80
80
포인터 이벤트는 `pointerId`와 `isPrimary` 프로퍼티를 활용해 멀티 터치를 처리할 수 있습니다.
81
81
82
-
사용자가 터치스크린의 한 곳을 터치한 다음 다른 손가락을 다른 곳에 올리면 다음과 같은 일이 발생합니다.
82
+
사용자가 터치스크린의 한 지점을 터치한 뒤, 다른 손가락을 다른 지점에 올리면 다음과 같은 일이 발생합니다.
83
83
84
84
1. 첫 번째 손가락이 터치될 때
85
85
- `isPrimary=true`와 어떤 `pointerId`를 가진 `pointerdown`이 발생합니다.
@@ -107,7 +107,7 @@ Internet Explorer 10이나 Safari 12 이하 같은 구형 브라우저를 지원
107
107
원인은 다음과 같습니다.
108
108
- 포인터 기기 하드웨어가 물리적으로 비활성화된 경우
109
109
- 기기 방향이 바뀐 경우(태블릿 회전)
110
-
- 브라우저가 상호작용을 마우스 제스처나 확대·이동 동작 등으로 보고 직접 처리하기로 한 경우
110
+
- 브라우저가 상호작용을 마우스 제스처나 확대축소 및 화면 이동 동작 등으로 보고 직접 처리하기로 한 경우
111
111
112
112
`pointercancel`이 어떤 영향을 주는지 실제 예시로 확인해 보겠습니다.
113
113
@@ -144,14 +144,14 @@ Internet Explorer 10이나 Safari 12 이하 같은 구형 브라우저를 지원
144
144
- CSS에서 `#ball { touch-action: none }`을 설정해 막습니다.
145
145
- 그러면 코드가 터치 기기에서도 작동하기 시작합니다.
146
146
147
-
이렇게 하면 이벤트가 의도대로 동작하고, 브라우저가 과정을 가로채거나 `pointercancel`을 발생시키지 않습니다.
147
+
이렇게 하면 이벤트가 의도대로 동작하고, 브라우저가 상호작용을 가로채거나 `pointercancel`을 발생시키지 않습니다.
148
148
149
149
```online
150
150
이 데모는 위 코드를 추가한 버전입니다.
151
151
152
152
[iframe src="ball-2" height=240 edit]
153
153
154
-
확인할 수 있듯이 더 이상 `pointercancel`은 발생하지 않습니다.
154
+
보시다시피 더 이상 `pointercancel`은 발생하지 않습니다.
155
155
```
156
156
157
157
이제 실제로 공을 움직이는 코드를 추가할 수 있고, 드래그 앤 드롭이 마우스 기기와 터치 기기에서 모두 동작합니다.
@@ -194,9 +194,9 @@ Internet Explorer 10이나 Safari 12 이하 같은 구형 브라우저를 지원
194
194
195
195
마우스 이벤트를 유사한 포인터 이벤트로 바꾼 뒤의 동작 로직은 다음과 같습니다.
196
196
197
-
1. 사용자가 슬라이더 `thumb`를 누르면 `pointerdown`이 발생합니다.
197
+
1. 사용자가 슬라이더 `thumb`을 누르면 `pointerdown`이 발생합니다.
198
198
2. 그런 다음 포인터를 움직이면 `pointermove`가 발생하고, 코드가 `thumb` 요소를 함께 움직입니다.
199
-
-...포인터가 움직이다 보면 슬라이더 `thumb` 요소를 벗어나 위아래로 이동할 수 있습니다. 그래도 `thumb`는 포인터에 맞춰 정확히 수평 방향으로만 이동해야 합니다.
199
+
- 포인터가 움직이다 보면 슬라이더 `thumb` 요소를 벗어나 위아래로 이동할 수 있습니다. 그래도 `thumb`은 포인터에 맞춰 정확히 수평 방향으로만 이동해야 합니다.
200
200
201
201
마우스 이벤트 기반 해결책에서는 포인터가 `thumb` 위아래로 이동하는 경우까지 포함해 모든 포인터 움직임을 추적하려고 전체 `document`에 `mousemove` 이벤트 핸들러를 할당해야 했습니다.
202
202
@@ -205,7 +205,7 @@ Internet Explorer 10이나 Safari 12 이하 같은 구형 브라우저를 지원
0 commit comments