Skip to content

Commit 9114b6e

Browse files
authored
Update article.md
1 parent 3081c2b commit 9114b6e

1 file changed

Lines changed: 14 additions & 14 deletions

File tree

2-ui/2-events/04-default-browser-action/article.md

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -99,11 +99,11 @@ menu.onclick = function(event) {
9999

100100
Почему это может быть полезно?
101101

102-
Есть некоторые события, как `touchmove` на мобильных устройствах (когда пользователь перемещает палец по экрану), которое по умолчанию запускает скроллинг, но мы можем отменить это действие, используя `preventDefault()` в обработчике.
102+
Есть некоторые события, как `touchmove` на мобильных устройствах (когда пользователь перемещает палец по экрану), которое по умолчанию начинает прокрутку, но мы можем отменить это действие, используя `preventDefault()` в обработчике.
103103

104-
Поэтому, когда браузер обнаружит такое событие, он должен для начала обработать все обработчики и после, если `preventDefault` не вызывается нигде, он может продолжить скроллинг. Это может вызвать ненужные задержки и "дрожание" в пользовательском интерфейсе.
104+
Поэтому, когда браузер обнаружит такое событие, он должен для начала запустить все обработчики и после, если `preventDefault` не вызывается нигде, он может начать прокрутку. Это может вызвать ненужные задержки в пользовательском интерфейсе.
105105

106-
Опция `passive: true` сообщает браузеру, что обработчик не собирается отменять скроллинг. Тогда браузер запускает скроллинг немедленно, обеспечивая максимально плавный интерфейс, параллельно обрабатывая событие.
106+
Опция `passive: true` сообщает браузеру, что обработчик не собирается отменять прокрутку. Тогда браузер начинает её немедленно, обеспечивая максимально плавный интерфейс, параллельно обрабатывая событие.
107107

108108
Для некоторых браузеров (Firefox, Chrome) опция `passive` по умолчанию включена `true` для таких событий, как `touchstart` и `touchmove`.
109109

@@ -112,7 +112,7 @@ menu.onclick = function(event) {
112112

113113
Свойство `event.defaultPrevented` установлено в `true`, если действие по умолчанию было предотвращено, и `false`, если нет.
114114

115-
Интересное применение свойства.
115+
Рассмотрим практическое применение этого свойства для улучшения архитектуры.
116116

117117
Помните, в главе <info:bubbling-and-capturing> мы говорили о `event.stopPropagation()` и упоминали, что останавливать "всплытие" - плохо?
118118

@@ -126,15 +126,15 @@ menu.onclick = function(event) {
126126
<button>клик правой кнопкой мыши для вызова контекстного меню браузера</button>
127127

128128
<button *!*oncontextmenu="alert('Рисуем наше меню'); return false"*/!*>
129-
клик правой кнопкой мыши для вызова нашего контекстного меню
129+
Кликните правой кнопкой мыши для вызова нашего контекстного меню
130130
</button>
131131
```
132132

133133
Теперь предположим, что мы хотим реализовать собственное контекстное меню для всего документа с нашими опциями. И внутри документа мы можем иметь другие элементы, у которых может быть своё контекстное меню:
134134

135135
```html autorun height=80 no-beautify run
136-
<p>клик правой кнопкой мыши для контекстного меню документа</p>
137-
<button id="elem">клик правой кнопкой мыши для контекстного меню кнопки</button>
136+
<p>Кликните правой кнопкой здесь для контекстного меню документа</p>
137+
<button id="elem">Кликните правой кнопкой здесь для контекстного меню кнопки</button>
138138

139139
<script>
140140
elem.oncontextmenu = function(event) {
@@ -154,8 +154,8 @@ menu.onclick = function(event) {
154154
Одним из решений будет полностью обработать событие в обработчике кнопки и остановить всплытие, используя `event.stopPropagation()`:
155155

156156
```html autorun height=80 no-beautify run
157-
<p>клик правой кнопкой мыши для меню документа</p>
158-
<button id="elem">клик правой кнопкой мыши для меню кнопки(добавлен event.stopPropagation)</button>
157+
<p>Кликните правой кнопкой для меню документа</p>
158+
<button id="elem">Кликните правой кнопкой для меню кнопки (добавлен event.stopPropagation)</button>
159159

160160
<script>
161161
elem.oncontextmenu = function(event) {
@@ -173,14 +173,14 @@ menu.onclick = function(event) {
173173
</script>
174174
```
175175

176-
Теперь контекстное меню для кнопки работает как задумано. Но цена слишком высока. Мы навсегда запретили доступ к контекстному меню для любого внешнего кода, включая счётчики, которые собирают статистику, и так далее. Это слегка неразумно.
176+
Теперь контекстное меню для кнопки работает как задумано. Но цена слишком высока. Мы навсегда запретили доступ к информации о правых кликах для любого внешнего кода, включая счётчики, которые могли бы собирать статистику, и т.п. Это слегка неразумно.
177177

178178
Альтернативным решением было бы проверить в обработчике `document`, было ли отменено действие по умолчанию? Если да, тогда событие было обработано, и нам не нужно на него реагировать.
179179

180180

181181
```html autorun height=80 no-beautify run
182182
<p>клик правой кнопкой мыши для меню документа (добавлен event.defaultPrevented)</p>
183-
<button id="elem">клик правой кнопкой мыши для меню кнопки</button>
183+
<button id="elem">Кликните правой кнопкой для меню кнопки</button>
184184

185185
<script>
186186
elem.oncontextmenu = function(event) {
@@ -199,7 +199,7 @@ menu.onclick = function(event) {
199199
</script>
200200
```
201201

202-
Сейчас всё работает правильно. Если у нас есть вложенные элементы и каждый из них имеет контекстное меню, то код также будет работать. Просто убедитесь, что проверяете `event.defaultPrevented` для каждого обработчика `contextmenu`.
202+
Сейчас всё работает правильно. Если у нас есть вложенные элементы и каждый из них имеет контекстное меню, то код также будет работать. Просто убедитесь, что проверяете `event.defaultPrevented` в каждом обработчике `contextmenu`.
203203

204204
```smart header="event.stopPropagation() и event.preventDefault()"
205205
Как мы можем видеть, `event.stopPropagation()` и `event.preventDefault()` (также известный как `return false`) - это две разные функции. Они никак не связаны друг с другом.
@@ -210,7 +210,7 @@ menu.onclick = function(event) {
210210
211211
Объект будет перехватывать любой клик правой кнопкой мыши, просматривать сохранённые обработчики и запускать соответствующий.
212212
213-
Но затем каждый фрагмент кода, которому требуется контекстное меню, должен знать об этом объекте и использовать его вместо собственного обработчика `contextmenu`.
213+
Но при этом каждый фрагмент кода, которому требуется контекстное меню, должен знать об этом объекте и использовать его вместо собственного обработчика `contextmenu`.
214214
```
215215

216216
## Итого
@@ -229,7 +229,7 @@ menu.onclick = function(event) {
229229

230230
Чтобы отменить действие браузера по умолчанию, используйте `event.preventDefault()` или `return false`. Второй метод работает, только если обработчик назначен через `on<событие>`.
231231

232-
Опция `passive: true` для `addEventListener` сообщает браузеру, что действие по умолчанию не будет отменено. Это очень полезно для некоторых событий на мобильных устройствах, таких как `touchstart` и `touchmove`, чтобы сообщить браузеру, что он не должен ожидать выполнения всех обработчиков, а ему следует сразу приступать к выполнению действия по умолчанию, например, скроллинга.
232+
Опция `passive: true` для `addEventListener` сообщает браузеру, что действие по умолчанию не будет отменено. Это очень полезно для некоторых событий на мобильных устройствах, таких как `touchstart` и `touchmove`, чтобы сообщить браузеру, что он не должен ожидать выполнения всех обработчиков, а ему следует сразу приступать к выполнению действия по умолчанию, например, к прокрутке.
233233

234234
Если событие по умолчанию отменено, то значение `event.defaultPrevented` становится `true`, иначе `false`.
235235

0 commit comments

Comments
 (0)