|
1 | | -# Мышь: движение mouseover/out, mouseenter/leave |
| 1 | +# Мышь: mouseover/out, mouseenter/leave |
2 | 2 |
|
3 | 3 | В этой главе мы более подробно рассмотрим события, возникающие при движении указателя (курсора) мыши над элементами страницы. |
4 | 4 |
|
5 | 5 | ## Mouseover/mouseout, relatedTarget |
6 | 6 |
|
7 | | -Событие `mouseover` происходит однократно в момент, когда курсор оказывается над элементом, а событие `mouseout` -- тоже однократно, но в момент, когда курсор уходит с элемента. |
| 7 | +Событие `mouseover` происходит в момент, когда курсор оказывается над элементом, а событие `mouseout` -- в момент, когда курсор уходит с элемента. |
8 | 8 |
|
9 | 9 |  |
10 | 10 |
|
11 | | -Эти события являются особенными, потому что у них имеется свойство `relatedTarget`. |
| 11 | +Эти события являются особенными, потому что у них имеется свойство `relatedTarget`. Оно "дополняет" `target`. Когда мышь переходит с одного элемента на другой, то один из них будет `target`, а другой `relatedTarget`. |
12 | 12 |
|
13 | 13 | Для события `mouseover`: |
14 | 14 |
|
|
33 | 33 |
|
34 | 34 | Это нормально и означает, что указатель мыши перешёл не с другого элемента, а из-за пределов окна браузера. Или же, наоборот, ушёл за пределы окна. |
35 | 35 |
|
36 | | -Разработчикам следует держать в голове такие варианты при использовании `event.relatedTarget` в своём коде. Если, например, написать `event.relatedTarget.tagName`, то при отсутствии `event.relatedTarget` будет ошибка. |
| 36 | +Следует держать в уме такую возможность при использовании `event.relatedTarget` в своём коде. Если, например, написать `event.relatedTarget.tagName`, то при отсутствии `event.relatedTarget` будет ошибка. |
37 | 37 | ``` |
38 | 38 |
|
39 | 39 | ## Частота запуска событий |
|
57 | 57 |  |
58 | 58 |
|
59 | 59 | <div style="display:none"> |
60 | | -В случае быстрого прохождения курсором промежуточных элементов события вообще могут не генерироваться. Но если уж курсор перешёл на элемент (было сгенерировано `mouseover`), то гарантировано при выходе с того элемента будет запущено событие `mouseout`. |
| 60 | +В случае быстрого прохождения курсором промежуточных элементов события вообще могут не генерироваться. Но если уж курсор перешёл на элемент (было сгенерировано `mouseover`), то гарантированно при выходе с того элемента будет запущено событие `mouseout`. |
61 | 61 | </div> |
62 | 62 |
|
63 | 63 | ```online |
|
78 | 78 |
|
79 | 79 | Это выглядит странно, но легко объясняется. |
80 | 80 |
|
81 | | -**По логике браузера, курсор мыши может быть только над одним элементом в любой момент времени - над самым глубоко вложенным (и/или имеющим приоритетное значение z-index).** |
| 81 | +**По логике браузера, курсор мыши может быть только над одним элементом в любой момент времени - над самым глубоко вложенным (и верхним по z-index).** |
82 | 82 |
|
83 | 83 | Таким образом, если курсор переходит на другой элемент (пусть даже дочерний), то он покидает предыдущий. Достаточно просто. |
84 | 84 |
|
85 | | -В примере ниже можно увидеть эту забавную последовательность сгенерированных событий. |
| 85 | +Это ведёт к забавным последствиям, которые мы можем видеть на примере ниже. |
86 | 86 |
|
87 | | -Красный `<div>` находится внутри синего. На синем элементе `<div>` определены обработчики событий `mouseover/out`, которые отображают всю информацию о них в текстовое поле ниже. |
| 87 | +Красный `<div>` находится внутри синего. На синем элементе `<div>` определены обработчики событий `mouseover/out`, которые выводят всю информацию о них в текстовое поле ниже. |
88 | 88 |
|
89 | 89 | Попробуйте зайти курсором на синий элемент, а затем перейдите на красный -- и смотрите, какие события сгенерировались: |
90 | 90 |
|
@@ -179,7 +179,7 @@ table.onmouseout = function(event) { |
179 | 179 |
|
180 | 180 | Стоит отметить, что: |
181 | 181 |
|
182 | | -- Быстрое движение мыши может не запустить события `mouseover, mousemove, mouseout` на промежуточных элементах. |
| 182 | +- При быстром движении мыши события `mouseover, mousemove, mouseout` не будут возникать на промежуточных элементах. |
183 | 183 | - События `mouseover/out` и `mouseenter/leave` имеют дополнительное свойство: `relatedTarget`. Оно дополняет свойство `target` и содержит ссылку на элемент, с/на который мы переходим. |
184 | | -- События `mouseover/out` запускаются, даже когда происходит переход с родительского элемента на дочерний. В этом случае предполагается, что курсор мыши может быть только над одним элементом в любой момент времени - над самым глубоко вложенным. |
| 184 | +- События `mouseover/out` возникают, даже когда происходит переход с родительского элемента на дочерний. В этом случае предполагается, что курсор мыши может быть только над одним элементом в любой момент времени - над самым глубоко вложенным. |
185 | 185 | - События `mouseenter/leave` не всплывают и не генерируются, когда курсор переходит на дочерний элемент. Они запускаются только при переходах с/на сам элемент, не принимая во внимание его дочерние элементы. |
0 commit comments