Обработка событий JavaScript фреймворка Vue.js
Подписка на события
Для подписки на события DOM и выполнения JavaScript-кода по их наступлении, используйте директиву v-on.
<div>
<button v-on:click="counter += 1">+1</button>
<p>Кнопка выше была нажата {{counter}} раз</p>
</div>
var example1 = new Vue({
el: '#example-1',
data: {
counter: 0
}
})Обработчики событий
Логика обработки события может быть сложной, поэтому v-on может принять название метода, который нужно вызвать.
<div>
<!-- `greet` — это название метода, определённого ниже -->
<button v-on:click="greet">Поприветствовать</button>
</div>
var example2 = new Vue({
el: '#example-2',
data: {
name: 'Vue.js'
},
// определяйте методы в объекте `methods`
methods: {
greet: function (event) {
// `this` внутри методов указывает на экземпляр Vue
alert('Привет, ' + this.
name + '!')
// `event` — нативное событие DOM
if (event) {
alert(event.target.tagName)
}
}
}
})
// вызывать методы можно и императивно
example2.greet() // => 'Привет, Vue.js!'Методы и inline-обработчики
Связаться с методом можно не по имени, а вызвав в JavaScript-выражении.
<div>
<button v-on:click="say('hi')">Скажи hi</button>
<button v-on:click="say('what')">Скажи what</button>
</div>
new Vue({
el: '#example-3',
methods: {
say: function (message) {
alert(message)
}
}
})Передать оригинальное событие DOM в метод inline-обработчика можно через специальную переменную $event:
<button v-on:click="warn('Форма пока что не может быть отправлена.', $event)">
Отправить
</button>
// .
..
methods: {
warn: function (message, event) {
// теперь у нас есть доступ к нативному событию
if (event) event.preventDefault()
alert(message)
}
}Модификаторы событий
При необходимости вызвать event.preventDefault() или event.stopPropagation() в обработчике события нужно использовать модификаторы событий для v-on.
Модификаторы директив указываются как постфиксы и отделяются точкой.
Конечно, это можно сделать внутри метода, но лучше сохранить чистоту логики и абстрагироваться от деталей реализации событий DOM.
- .stop
- .prevent
- .capture
- .self
- .once
<!-- событие click не будет всплывать дальше -->
<a v-on:click.stop="doThis"></a>
<!-- событие submit больше не будет перезагружать страницу -->
<form v-on:submit.prevent="onSubmit"></form>
<!-- модификаторы можно объединять в цепочки -->
<a v-on:click.
stop.prevent="doThat"></a>
<!-- и использовать без указания пользовательского обработчика -->
<form v-on:submit.prevent></form>
<!-- при добавлении слушателя события можно использовать capture mode -->
<!-- т.е. событие, нацеленное на внутренний элемент, обрабатывается здесь после обработки этим элементом -->
<div v-on:click.capture="doThis">...</div>
<!-- вызывать обработчик только в случае наступления события непосредственно -->
<!-- на данном элементе (то есть не на дочернем компоненте) -->
<div v-on:click.self="doThat">...</div> Порядок модификаторов имеет значение, так как код генерируется в указанном порядке. Использование @click.prevent.self будет предотвращать все клики, а @click.self.prevent будет предотвращать клики только на самом элементе.
<!-- Событие click сработает только 1 раз -->
<a v-on:click.
once="doThis"></a>Модификатор .once в отличие от остальных, которые поддерживают нативные DOM-события, можно использовать и в пользовательских событиях компонентов.
Модификаторы клавиш
Vue позволяет добавить модификаторы клавиш при использовании v-on для отслеживания событий от клавиатуры:
<!-- вызвать `vm.submit()` только если `keyCode` равен 13 --> <input v-on:keyup.13="submit">
Vue предоставляет псевдонимы для часто используемых кодов клавиш:
<!-- аналогично примеру выше -->
<input v-on:keyup.enter="submit">
<!-- работает также и в сокращённой записи -->
<input @keyup.enter="submit">- .enter
- .tab
- .delete (ловит как “Delete”, так и “Backspace”)
- .esc
- .space
- .up
- .down
- .left
- .right
Можно также определить пользовательские псевдонимы клавиш через глобальный объект config.
keyCodes:
// позволит использовать `v-on:keyup.f1`
Vue.config.keyCodes.f1 = 112Автоматические модификаторы клавиш
Использовать любые допустимые имена клавиш напрямую, открытые через KeyboardEvent.key в качестве модификаторов, можно именуя их в kebab-case:
<input @keyup.page-down="onPageDown">В примере обработчик будет вызван если $event.key === ‘PageDown’.
Системные модификаторы клавиш
Можно использовать следующие модификаторы, чтобы отслеживать события мыши или клавиатуры с зажатой клавишей-модификатором:
- .ctrl
- .alt
- .shift
- .meta
<!-- Alt + C -->
<input @keyup.alt.67="clear">
<!-- Ctrl + Click -->
<div @click.ctrl="doSomething">Сделать что-нибудь</div>Модификатор .exact
Модификатор .exact дает контролировать точную комбинацию системных модификаторов, нужных для запуска события.
<!-- это сработает даже если Alt или Shift также нажаты --> <button @click.ctrl="onClick">A</button> <!-- это сработает только когда нажат Ctrl и не нажаты никакие другие клавиши --> <button @click.ctrl.exact="onCtrlClick">A</button> <!-- это сработает только когда не нажаты никакие системные модификаторы --> <button @click.exact="onClick">A</button>
Модификаторы клавиш мыши
Следующие модификаторы ограничивают обработчик события только вызовами определённой кнопкой мыши.
- .left
- .right
- .middle
Почему подписчики указываются в HTML?
Все обработчики во Vue строго связываются с ответственным за текущее представление экземпляром vm. Поэтому трудностей в поддержке не возникает.
Преимущества использования v-on:
- Легче получить представление об обработчиках
- Код vm остаётся независимым от DOM и содержит только необходимую логику, так как не нужно вручную привязывать слушателей событий в JavaScript.
- Когда vm уничтожается, все слушатели событий автоматически удаляются.
HTML DOM События
❮ Предыдущая Следующая Ссылка ❯
HTML DOM События
HTML DOM события позволяют JavaScript регистрировать различные обработчик событий элементов в HTML-документе.
События , как правило , используются в комбинации с функциями, и функция не будет выполнена , прежде чем происходит событие (such as when a user clicks a button) .
Tip: Модель событий был стандартизирован W3C в DOM Level 2.
HTML DOM События
DOM: Указывает , в котором был введен DOM Level свойство.
События мыши
| Мероприятие | Описание | DOM |
|---|---|---|
| по щелчку | Событие происходит, когда пользователь нажимает на элемент | 2 |
| oncontextmenu | Событие происходит, когда правая-пользователь нажимает на элемент, чтобы открыть контекстное меню | 3 |
| ondblclick | Событие происходит, когда пользователь дважды щелкает на элементе | 2 |
| OnMouseDown | Событие происходит, когда пользователь нажимает кнопку мыши над элементом | 2 |
| OnMouseEnter | Событие происходит, когда указатель перемещается на элемент | 2 |
| OnMouseLeave | Событие происходит, когда указатель перемещается из элемента | 2 |
| OnMouseMove | Событие происходит, когда указатель перемещается в то время как он находится над элементом | 2 |
| при наведении курсора на | Событие происходит, когда указатель перемещается на элемент, или на одном из своих детей | 2 |
| onmouseout | Событие происходит, когда пользователь перемещает указатель мыши из одного элемента, или из одного из своих детей | 2 |
| OnMouseUp | Событие происходит, когда пользователь отпускает кнопку мыши над элементом | 2 |
клавишные события
| Мероприятие | Описание | DOM |
|---|---|---|
| OnKeyDown | Событие происходит, когда пользователь нажимает клавишу | 2 |
| OnKeyPress | Событие происходит, когда пользователь нажимает клавишу | 2 |
| OnKeyUp | Событие происходит, когда пользователь отпускает клавишу | 2 |
Каркасный / Событие объекта
| Мероприятие | Описание | DOM |
|---|---|---|
| OnAbort | Событие происходит, когда загрузка ресурса была прервана | 2 |
| onbeforeunload | Событие происходит до того, как документ собирается быть выгружен | 2 |
| OnError | Событие происходит, когда возникает ошибка при загрузке внешнего файла | 2 |
| onhashchange | Событие происходит, когда произошло изменения в анкерной части URL | 3 |
| в процессе | Событие возникает, когда объект загружен | 2 |
| onpageshow | Событие происходит, когда пользователь переходит на веб-страницу | 3 |
| onpagehide | Событие происходит, когда пользователь переходит от веб-страницы | 3 |
| OnResize | Событие происходит, когда вид документа изменен | 2 |
| OnScroll | Событие происходит, когда полоса прокрутки элемента давал в настоящее время прокручивается | 2 |
| OnUnload | Событие происходит раз страница выгрузил (для <тело>) | 2 |
Форма События
| Мероприятие | Описание | DOM |
|---|---|---|
| ONBLUR | Событие происходит, когда элемент теряет фокус | 2 |
| по изменению | Событие происходит , когда содержание элемента формы, выбор, или проверяемое состояние изменилось (for <input>, <keygen>, <select>, and <textarea>) | 2 |
| OnFocus | Событие происходит, когда элемент получает фокус | 2 |
| onfocusin | Событие происходит, когда элемент собирается получить фокус | 2 |
| onfocusout | Событие происходит, когда элемент собирается терять фокус | 2 |
| oninput | Событие происходит, когда элемент получает ввод пользователя | 3 |
| oninvalid | Событие происходит, когда элемент является недействительным | 3 |
| OnReset | Событие возникает, когда форма сбрасывается | 2 |
| onsearch | Событие происходит, когда пользователь пишет что-то в поле поиска (для <вход = «поиск»>) | 3 |
| onselect | Событие происходит после того, как пользователь выбирает текст (for <input> and <textarea>) | 2 |
| onsubmit | Событие происходит, когда форма была отправлена | 2 |
Перетащите события
| Мероприятие | Описание | DOM |
|---|---|---|
| ondrag | Событие происходит, когда элемент перетаскивается | 3 |
| ondragend | Событие происходит, когда пользователь закончит перетаскивание элемента | 3 |
| OnDragEnter | Событие происходит, когда элемент входит тащили целью снижения | 3 |
| OnDragLeave | Событие происходит, когда тащил элемент покидает цель снижения | 3 |
| OnDragOver | Событие происходит, когда тащил элемент над целевым объектом перетаскивания | 3 |
| ondragstart | Событие происходит, когда пользователь начинает перетаскивать элемент | 3 |
| OnDrop | Событие происходит, когда тащил элемент падает на цели перетаскивания | 3 |
Буфер обмена событий
| Мероприятие | Описание | DOM |
|---|---|---|
| oncopy | Событие происходит, когда пользователь копирует содержимое элемента | |
| oncut | Событие происходит, когда пользователь обрезает содержимое элемента | |
| onpaste | Событие происходит, когда пользователь вставляет некоторое содержание в элементе |
Печать События
| Мероприятие | Описание | DOM |
|---|---|---|
| OnAfterPrint | Событие происходит, когда страница начала печати, или если окно печати диалог был закрыт | 3 |
| OnBeforePrint | Событие происходит, когда страница собирается быть распечатаны | 3 |
СМИ События
| Мероприятие | Описание | DOM |
|---|---|---|
| OnAbort | Событие происходит, когда нагрузка на СМИ прерывается | 3 |
| oncanplay | Событие происходит, когда браузер может начать воспроизведение носителя (когда он буферном достаточно, чтобы начать) | 3 |
| oncanplaythrough | Событие происходит, когда браузер может играть через средства массовой информации без остановки для буферизации | 3 |
| ondurationchange | Событие происходит, когда длительность СМИ изменяется | 3 |
| onemptied | Событие происходит , когда что — то плохое происходит , и медиа — файл вдруг недоступен (like unexpectedly disconnects) , (like unexpectedly disconnects) | 3 |
| onended | Событие происходит , когда среда имеет дойдет до конца (useful for messages like «thanks for listening») | 3 |
| OnError | Событие происходит, когда произошла ошибка во время загрузки медиа-файл | 3 |
| onloadeddata | Событие происходит, когда данные носитель загружен | 3 |
| onloadedmetadata | Событие происходит , когда данные мета (like dimensions and duration) , (like dimensions and duration) не загружены | 3 |
| onloadstart | Событие происходит, когда браузер начинает искать для указанного средства массовой информации | 3 |
| OnPause | Событие происходит, когда среда находится в режиме паузы либо пользователем, либо программно | 3 |
| onplay | Событие происходит, когда были начаты СМИ или больше не приостановлено | 3 |
| onplaying | Событие происходит, когда среда играет после того, как был остановлен или остановлен для буферизации | 3 |
| в процессе | Событие происходит , когда браузер находится в процессе получения мультимедийных данных (downloading the media) | 3 |
| onratechange | Событие происходит, когда скорость воспроизведения СМИ изменяется | 3 |
| onseeked | Событие происходит, когда пользователь заканчивает перемещение / пропуск в новую позицию в средствах массовой информации | 3 |
| onseeking | Событие происходит, когда пользователь начинает движение / пропуск в новое положение в средствах массовой информации | 3 |
| onstalled | Событие происходит, когда браузер пытается получить мультимедийные данные, но данные не доступны | 3 |
| onsuspend | Событие происходит, когда браузер намеренно не получать мультимедийные данные | 3 |
| ontimeupdate | Событие происходит, когда позиция воспроизведения изменилась (например, когда пользователь быстро вперед к другой точке в средствах массовой информации) | 3 |
| onvolumechange | Событие происходит, когда объем средств массовой информации изменился (включает в себя установку громкости на «немую») | 3 |
| onwaiting | Событие происходит, когда СМИ приостановлены, но ожидается возобновление (например, когда носитель делает паузу в буфере больше данных) | 3 |
Анимация событий
| Мероприятие | Описание | DOM |
|---|---|---|
| animationend | Событие происходит, когда CSS анимация завершена | 3 |
| animationiteration | Событие происходит, когда CSS анимация повторяется | 3 |
| animationstart | Событие происходит, когда была начата CSS анимации | 3 |
Переходные события
| Мероприятие | Описание | DOM |
|---|---|---|
| transitionend | Событие происходит, когда переход CSS завершен | 3 |
Серверный Sent Events
| Мероприятие | Описание | DOM |
|---|---|---|
| OnError | Событие происходит, когда возникает ошибка с источником событий | |
| OnMessage | Событие происходит, когда сообщение получено через источник событий | |
| OnOpen | Событие происходит, когда соединение с источником событий открыто |
Разное События
| Мероприятие | Описание | DOM |
|---|---|---|
| OnMessage | Событие происходит , когда сообщение получено через или от объекта (WebSocket, Web Worker, Event Source or a child frame or a parent window) | 3 |
| OnMouseWheel | Устаревшее. Используйте onwheel событие вместо | |
| ononline | Событие происходит, когда браузер начинает работать в режиме онлайн | 3 |
| onoffline | Событие происходит, когда браузер начинает работать в автономном режиме | 3 |
| onpopstate | Событие происходит, когда изменяется история окна | 3 |
| OnShow | Событие происходит , когда <menu> элемент отображается в контекстном меню | 3 |
| onstorage | Событие происходит, когда веб-зона хранения обновляется | 3 |
| ontoggle | Событие происходит , когда пользователь открывает или закрывает <details> элемента | 3 |
| onwheel | Событие происходит, когда колесо мыши катится вверх или вниз над элементом | 3 |
Сенсорные события
| Мероприятие | Описание | DOM |
|---|---|---|
| ontouchcancel | Событие происходит, когда прикосновение прерывается | |
| ontouchend | Событие происходит, когда палец удаляется с сенсорным экраном | |
| OnTouchMove | Событие происходит, когда палец тащили по экрану | |
| ontouchstart | Событие происходит, когда палец находится на сенсорном экране |
Объект события
Константы
| постоянная | Описание | DOM |
|---|---|---|
| CAPTURING_PHASE | Текущая фаза события фаза захвата (1) | 1 |
| AT_TARGET | Текущее событие в целевой фазе, т. е. он оценивается на цели события (2) | 2 |
| BUBBLING_PHASE | Текущая фаза события является фазой восходящей цепочки (3) | 3 |
свойства
| Имущество | Описание | DOM |
|---|---|---|
| пузырьки | Возвращает ли не конкретное событие является событием восходящей цепочки | 2 |
| отменяемый | Возвращает ли не событие может быть его действие по умолчанию предотвращено | 2 |
| currentTarget | Возвращает элемент, событие слушателей вызвал событие | 2 |
| defaultPrevented | Возвращает или нет preventDefault() был вызван метод для события | 3 |
| EventPhase | Возвращает какую фазу потока событий, в настоящее время оценивается | 2 |
| isTrusted | Возвращает или не является доверенным событие | 3 |
| цель | Возвращает элемент, который вызвал событие | 2 |
| TIMESTAMP | Возвращает время (in milliseconds relative to the epoch) , на котором было создано событие | 2 |
| тип | Возвращает имя события | 2 |
| Посмотреть | Возвращает ссылку на объект Window, где произошедшего события | 2 |
методы
| метод | Описание | DOM |
|---|---|---|
| preventDefault() | Отменяет событие, если оно отменяемое, а это означает, что действие по умолчанию, которое принадлежит к событию не произойдет | 2 |
| stopImmediatePropagation() | Предотвращает других слушателей одного и того же события от призыва | 3 |
| stopPropagation() | Предотвращает дальнейшее распространение события во время потока событий | 2 |
MouseEvent Объект
| Имущество | Описание | DOM |
|---|---|---|
| клавишу Alt | Возвращает ли «ALT» была нажата клавиша , когда событие мыши было вызвано | 2 |
| кнопка | Возвращает, какая кнопка мыши была нажата, когда событие мыши было вызвано | 2 |
| кнопки | Возвращает какие кнопки мыши были нажаты, когда событие мыши было вызвано | 3 |
| clientX | Возвращает горизонтальную координату указателя мыши, относительно текущего окна, когда событие мыши было вызвано | 2 |
| clientY | Возвращает вертикальную координату указателя мыши относительно текущего окна, когда событие мыши было вызвано | 2 |
| ctrlKey | Возвращает ли «CTRL» клавиша была нажата , когда событие мыши было вызвано | 2 |
| подробно | Возвращает число, указывающее, сколько раз была нажата мышь | 2 |
| metaKey | Возвращает ли «META» клавиша была нажата , когда событие было вызвано | 2 |
| pageX | Возвращает горизонтальную координату указателя мыши, по отношению к документу, когда событие мыши было вызвано | |
| Пейджи | Возвращает вертикальную координату указателя мыши относительно документа, когда событие мыши было вызвано | |
| relatedTarget | Возвращает элемент, связанный с элементом, который вызвал событие мыши | 2 |
| ScreenX | Возвращает горизонтальную координату указателя мыши, по отношению к экрану, когда событие было вызвано | 2 |
| Screeny | Возвращает вертикальную координату указателя мыши относительно экрана, когда событие было вызвано | 2 |
| shiftKey | Возвращает ли «SHIFT» была нажата клавиша , когда событие было вызвано | 2 |
| который | Возвращает, какая кнопка мыши была нажата, когда событие мыши было вызвано | 2 |
KeyboardEvent объекта
| Имущество | Описание | DOM |
|---|---|---|
| клавишу Alt | Возвращает ли «ALT» была нажата клавиша , когда ключевое событие было вызвано | 2 |
| ctrlKey | Возвращает ли «CTRL» была нажата клавиша , когда ключевое событие было вызвано | 2 |
| charCode | Возвращает код символа Unicode ключа, инициировавшего событие OnKeyPress | 2 |
| ключ | Возвращает значение ключа ключа, представленного события | 3 |
| ключевой код | Возвращает код символа Unicode ключа, инициировавший OnKeyPress события, или код ключа Unicode ключа, инициировавшего OnKeyDown или OnKeyUp события | 2 |
| место нахождения | Возвращает расположение клавиши на клавиатуре или устройства | 3 |
| metaKey | Возвращает ли «meta» была нажата клавиша , когда ключевое событие было вызвано | 2 |
| shiftKey | Возвращает ли «SHIFT» была нажата клавиша , когда ключевое событие было вызвано | 2 |
| который | Возвращает код символа Unicode ключа, инициировавший OnKeyPress события, или код ключа Unicode ключа, инициировавшего OnKeyDown или OnKeyUp события | 2 |
HashChangeEvent объекта
| Имущество | Описание | DOM |
|---|---|---|
| NEWURL | Возвращает URL документа, после того, как хэш был изменен | |
| OLDURL | Возвращает URL документа, до того, как хэш был изменен |
PageTransitionEvent объекта
| Имущество | Описание | DOM |
|---|---|---|
| сохранялось | Возвращает ли веб-страница была кэшируются браузером |
FocusEvent объекта
| Имущество | Описание | DOM |
|---|---|---|
| relatedTarget | Возвращает элемент, связанный с элементом, вызвавшего событие | 3 |
AnimationEvent объекта
| Имущество | Описание | DOM |
|---|---|---|
| animationName | Возвращает имя анимации | |
| пройденное время | Возвращает количество секунд анимация была запущена |
TransitionEvent объекта
| Имущество | Описание | DOM |
|---|---|---|
| Имя свойства | Возвращает имя свойства CSS, связанное с переходом | |
| пройденное время | Возвращает количество секунд, переход был запущен |
WheelEvent объекта
| Имущество | Описание | DOM |
|---|---|---|
| DeltaX | Возвращает величину горизонтальной прокрутки колеса мыши (x-axis) | 3 |
| deltaY | Возвращает количество вертикальной прокрутки колеса мыши (y-axis) | 3 |
| deltaZ | Возвращает количество прокрутки колеса мыши для оси | 3 |
| deltaMode | Возвращает число, представляющую единицу измерения для значений дельты (pixels, lines or pages) | 3 |
❮ Предыдущая Следующая Ссылка ❯
События мыши
Откройте для себя основы работы с событиями мыши в JavaScript.
Подробнее о событиях JavaScript
При просмотре событий мыши у нас есть возможность взаимодействовать с
-
mousedownкнопка мыши была нажата -
mouseupкнопка мыши была отпущена -
кликсобытие клика -
dblclickсобытие двойного щелчка -
mousemoveпри наведении мыши на элемент -
mouseoverпри наведении мыши на элемент или один из его дочерних элементов -
mouseenter при наведении мыши на элемент. Аналогичнопри наведении курсора, но не всплывает (подробнее об этом позже!) -
mouseoutкогда мышь перемещается из элемента и когда мышь входит в дочерние элементы -
mouseleaveпри перемещении мыши из элемента. Похоже наmouseoutно не всплывает (подробнее об этом скоро!) -
contextmenuпри открытии контекстного меню, т.
е. правой кнопкой мыши нажмите
События перекрываются. Когда вы отслеживаете событие click , это похоже на отслеживание события mousedown , за которым следует событие mouseup . В случае dblclick , click также срабатывает два раза.
mousedown , mousemove и mouseup можно использовать в комбинации для отслеживания событий перетаскивания.
Будьте осторожны с mousemove , так как он срабатывает много раз во время движения мыши. Нам нужно применить дросселирование , о чем мы поговорим подробнее, когда будем анализировать прокрутку.
Внутри обработчика событий у нас есть доступ к множеству свойств.
Например, в событии мыши мы можем проверить, какая кнопка мыши была нажата, проверив свойство кнопки объекта события:
константная ссылка = document.getElementById('моя-ссылка')
link.
addEventListener('mousedown', событие => {
// кнопка мыши нажата
console.log(event.button) //0=слева, 2=справа
}) Вот все свойства, которые мы можем использовать:
-
altKeytrue, если клавиша alt была нажата при запуске события -
кнопка , если есть, номер кнопки, которая была нажата при срабатывании события мыши (обычно 0 = основная кнопка, 1 = средняя кнопка, 2 = правая кнопка). Работает с событиями, вызванными нажатием кнопки (например, щелчки) -
кнопки, если есть, число, указывающее кнопку (кнопки), нажатые при любом событии мыши. -
clientX/clientYкоординаты x и y указателя мыши относительно окна браузера, независимо от прокрутки -
ctrlKeyИстинно, если клавиша ctrl была нажата во время запуска события -
metaKeytrue, если метаклавиша была нажата при запуске события -
движениеX/движениеYкоординаты x и y указателя мыши относительно положения последнего события mousemove.
Используется для отслеживания скорости мыши при перемещении вокруг -
региониспользуется в Canvas API -
relatedTargetвторичная цель для события, например при перемещении -
screenX/screenYкоординаты x и y указателя мыши в координатах экрана -
shiftKeytrue, если при запуске события была нажата клавиша Shift
Three.js Journey — события мыши с R3F
Введение 00:00
Этот урок называется «события мыши», чтобы прояснить ситуацию, но на самом деле он имеет дело с «событиями указателя» в целом, поскольку то, что мы увидим, также будет работать с сенсорными экранами.
Из практических соображений мы будем демонстрировать только использование мыши (или трекпада), но не стесняйтесь протестировать этот урок на своем телефоне или любом другом устройстве, к которому у вас есть доступ.
В стартере у нас есть оранжевая сфера, анимированный фиолетовый куб и зеленый пол.
9Зависимость 0157 @react-three/drei уже установлена в проекте, и мы используем помощник OrbitControls , чтобы иметь возможность перемещать камеру.
Мы не использовали Perf , так как у нас не должно быть проблем с производительностью, но вы можете добавить его, если хотите.
Прослушивание событий кликов 00:44
Как обсуждалось в предыдущих уроках, обработка событий мыши была немного сложной. Нам понадобился Raycaster, отбрасываем несколько лучей (иногда в каждом кадре) и тестируем пересекающиеся объекты, которые нам нужно было поместить в массивы и т.
д.
R3F значительно упростил этот процесс, и нам даже не нужно реализовывать Raycaster.
Начнем с прослушивания события click.
Все, что нам нужно сделать, это добавить атрибут onClick к объекту в нашей сцене (например, ) и предоставить ему функцию.
Мы можем отправить функцию напрямую или создать ее заранее.
В Experience.jsx создайте функцию eventHandler до:
экспортировать функцию по умолчанию Experience()
{
// ...
константный обработчик событий = () =>
{
console.log('событие произошло')
}
// ...
} Мы выбрали общее имя для функции ( eventHandler ), так как собираемся использовать его для тестирования других событий. Но для реальных проектов не забудьте назвать свою функцию чем-то понятным, например cubeClickHandler .


..
methods: {
warn: function (message, event) {
// теперь у нас есть доступ к нативному событию
if (event) event.preventDefault()
alert(message)
}
}
stop.prevent="doThat"></a>
<!-- и использовать без указания пользовательского обработчика -->
<form v-on:submit.prevent></form>
<!-- при добавлении слушателя события можно использовать capture mode -->
<!-- т.е. событие, нацеленное на внутренний элемент, обрабатывается здесь после обработки этим элементом -->
<div v-on:click.capture="doThis">...</div>
<!-- вызывать обработчик только в случае наступления события непосредственно -->
<!-- на данном элементе (то есть не на дочернем компоненте) -->
<div v-on:click.self="doThat">...</div>
once="doThis"></a>
Используйте onwheel событие вместо
е. он оценивается на цели события (2)
е. правой кнопкой мыши нажмите
addEventListener('mousedown', событие => {
// кнопка мыши нажата
console.log(event.button) //0=слева, 2=справа
})
Используется для отслеживания скорости мыши при перемещении вокруг