|
6 | 6 |
|
7 | 7 | ## Типы событий мыши |
8 | 8 |
|
9 | | -Мы можем разделить события мыши на две категории: "простые" и "комплексные". |
10 | | - |
11 | | -### Простые события |
12 | | - |
13 | | -Самые часто используемые простые события: |
| 9 | +Мы уже видели некоторые из этих событий: |
14 | 10 |
|
15 | 11 | `mousedown/mouseup` |
16 | 12 | : Кнопка мыши нажата/отпущена над элементом. |
|
21 | 17 | `mousemove` |
22 | 18 | : Каждое движение мыши над элементом генерирует это событие. |
23 | 19 |
|
24 | | -`contextmenu` |
25 | | -: Вызывается при попытке открытия контекстного меню, как правило, нажатием правой кнопки мыши. Но, заметим, это не совсем событие мыши, оно может вызываться и специальной клавишей клавиатуры. |
26 | | - |
27 | | -...Есть также несколько иных типов событий, которые мы рассмотрим позже. |
28 | | - |
29 | | -### Комплексные события |
30 | | - |
31 | 20 | `click` |
32 | 21 | : Вызывается при `mousedown` , а затем `mouseup` над одним и тем же элементом, если использовалась левая кнопка мыши. |
33 | 22 |
|
34 | 23 | `dblclick` |
35 | 24 | : Вызывается двойным кликом на элементе. |
36 | 25 |
|
37 | | -Комплексные события состоят из простых, поэтому в теории мы могли бы без них обойтись. Но хорошо, что они существуют, потому что работать с ними очень удобно. |
| 26 | +`contextmenu` |
| 27 | +: Вызывается при попытке открытия контекстного меню, как правило, нажатием правой кнопки мыши. Но, заметим, это не совсем событие мыши, оно может вызываться и специальной клавишей клавиатуры. |
| 28 | + |
| 29 | +...Есть также несколько иных типов событий, которые мы рассмотрим позже. |
38 | 30 |
|
39 | | -### Порядок событий |
| 31 | +## Порядок событий |
40 | 32 |
|
41 | | -Одно действие может вызвать несколько событий. |
| 33 | +Как вы можете видеть из приведенного выше списка, действие пользователя может вызвать несколько событий. |
42 | 34 |
|
43 | 35 | Например, клик мышью вначале вызывает `mousedown`, когда кнопка нажата, затем `mouseup` и `click`, когда она отпущена. |
44 | 36 |
|
|
54 | 46 | <input onmousedown="return logMouse(event)" onmouseup="return logMouse(event)" onclick="return logMouse(event)" oncontextmenu="return logMouse(event)" ondblclick="return logMouse(event)" value="Кликни меня левой или правой кнопкой мыши" type="button"> <input onclick="logClear('test')" value="Очистить" type="button"> <form id="testform" name="testform"> <textarea style="font-size:12px;height:150px;width:360px;"></textarea></form> |
55 | 47 | ``` |
56 | 48 |
|
57 | | -## Получение информации о кнопке: which |
| 49 | +## Кнопки мыши |
| 50 | + |
| 51 | +События, связанные с кликом, всегда имеют свойство `button`, которое позволяет получить конкретную кнопку мыши. |
| 52 | + |
| 53 | +Обычно мы не используем его для событий `click` и `contextmenu`, потому что первое происходит только при щелчке левой кнопкой мыши, а второе - только при щелчке правой кнопкой мыши. |
58 | 54 |
|
59 | | -События, связанные с кликом, всегда имеют свойство `which`, которое позволяет определить нажатую кнопку мыши. |
| 55 | +С другой стороны, обработчикам `mousedown` и `mouseup` может потребоваться `event.button`, потому что эти события срабатывают на любую кнопку, таким образом `button` позволяет различать "нажатие правой кнопки" и "нажатие левой кнопки". |
60 | 56 |
|
61 | | -Это свойство не используется для событий `click` и `contextmenu`, поскольку первое происходит только при нажатии левой кнопкой мыши, а второе -- правой. |
| 57 | +Возможными значениями `event.button` являются: |
62 | 58 |
|
63 | | -Но если мы отслеживаем `mousedown` и `mouseup`, то оно нам нужно, потому что эти события срабатывают на любой кнопке, и `which` позволяет различать между собой "нажатие правой кнопки" и "нажатие левой кнопки". |
| 59 | +| Состояние кнопки | `event.button` | |
| 60 | +|--------------|----------------| |
| 61 | +| Левая кнопка (основная) | 0 | |
| 62 | +| Средняя кнопка (вспомогательная) | 1 | |
| 63 | +| Правая кнопка (вторичная) | 2 | |
| 64 | +| Кнопка X1 (назад) | 3 | |
| 65 | +| Кнопка X2 (вперед) | 4 | |
64 | 66 |
|
65 | | -Есть три возможных значения: |
| 67 | +Большинство мышек имеют только левую и правую кнопку, поэтому возможные значения это 0 или 2. Сенсорные устройства также генерируют аналогичные события, когда кто-то нажимает на них. |
66 | 68 |
|
67 | | -- `event.which == 1` -- левая кнопка |
68 | | -- `event.which == 2` -- средняя кнопка |
69 | | -- `event.which == 3` -- правая кнопка |
| 69 | +Также есть свойство `event.buttons`, в котором все нажатые в данный момент кнопки представлены в виде целого числа, по одному биту на кнопку. На практике это свойство используется очень редко, вы можете найти подробную информацию по адресу [MDN](mdn:/api/MouseEvent/buttons), если вам это когда-нибудь понадобится. |
| 70 | + |
| 71 | +```warn header="Устревшее свойство `event.which`" |
| 72 | +В старом коде вы можете встретить `event.which` свойство - это старый нестандартный способ получения кнопки с возможными значениями: |
| 73 | + |
| 74 | +- `event.which == 1` – левая кнопка, |
| 75 | +- `event.which == 2` – средняя кнопка, |
| 76 | +- `event.which == 3` – правая кнопка. |
| 77 | + |
| 78 | +На данный момент `event.which` устарел, нам не следует его использовать. |
| 79 | +``` |
70 | 80 |
|
71 | 81 | Средняя кнопка сейчас -- скорее экзотика, и используется очень редко. |
72 | 82 |
|
|
0 commit comments