Обработка событий 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=справа })
Вот все свойства, которые мы можем использовать:
-
altKey
true, если клавиша alt была нажата при запуске события -
кнопка
-
кнопки
, если есть, число, указывающее кнопку (кнопки), нажатые при любом событии мыши. -
clientX
/clientY
координаты x и y указателя мыши относительно окна браузера, независимо от прокрутки -
ctrlKey
Истинно, если клавиша ctrl была нажата во время запуска события -
metaKey
true, если метаклавиша была нажата при запуске события -
движениеX
/движениеY
координаты x и y указателя мыши относительно положения последнего события mousemove. Используется для отслеживания скорости мыши при перемещении вокруг -
регион
используется в Canvas API -
relatedTarget
вторичная цель для события, например при перемещении -
screenX
/screenY
координаты x и y указателя мыши в координатах экрана -
shiftKey
true, если при запуске события была нажата клавиша 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
.