События
Паттерн слушателей, общий для всего SDK. Нет глобального Emitter, который нужно конструировать —
эта страница описывает два метода, которые предоставляет каждый объект с событиями, и как они себя
ведут. UI-элементы — исключение: они используют чейнящиеся методы on* (см. ниже).
Обзор
scene.addEventListener('click', ev => console.log(ev.clientX, ev.clientY))
const onDone = () => next()
player.addEventListener('completed', onDone)
player.removeEventListener('completed', onDone) // удаление по ТОЙ ЖЕ ссылке на функциюAPI
obj.addEventListener(channel, callback): void
obj.removeEventListener(channel, callback): voidКаналы и сигнатуры колбэков типизированы для каждого объекта ('click' узла доставляет
ClickEvent, 'completed' медиаплеера не доставляет ничего). Удаление сопоставляется по
идентичности функции — храни ссылку на любой колбэк, который придётся удалять.
нет ни once(), ни публичной отправки — только сам объект-владелец эмитит свои события. Добавление
одного колбэка дважды вызывает его дважды. Удаление слушателя изнутри колбэка безопасно (отправка
итерируется по снимку).
У кого он есть
- 3D
Scene/Node, 2DScene2D/Node2D— события указателя (click,touchstart), события контактов физики device—resizeAudioPlayer/VideoPlayer—completed,loopReachedWebSocket—open,message,close,error
UI устроен иначе: методы on*
UI-элементы не используют addEventListener; они принимают колбэки через чейнящиеся методы on*,
чтобы обработчики вставали в цепочку сборки:
UIButton('Play').onClick(() => start()) // UI: чейнящийся сеттер on*
ball.addEventListener('click', () => kick()) // сцены/узлы: addEventListenerСмотрите также
- События указателя и жесты — объекты событий
click/touchstart. - Соглашения — правило событий в контексте.