LeCodesdocs

События

Паттерн слушателей, общий для всего SDK. Нет глобального Emitter, который нужно конструировать — эта страница описывает два метода, которые предоставляет каждый объект с событиями, и как они себя ведут. UI-элементы — исключение: они используют чейнящиеся методы on* (см. ниже).

Обзор

TypeScript
scene.addEventListener('click', ev => console.log(ev.clientX, ev.clientY))

const onDone = () => next()
player.addEventListener('completed', onDone)
player.removeEventListener('completed', onDone)   // удаление по ТОЙ ЖЕ ссылке на функцию

API

TypeScript
obj.addEventListener(channel, callback): void
obj.removeEventListener(channel, callback): void

Каналы и сигнатуры колбэков типизированы для каждого объекта ('click' узла доставляет ClickEvent, 'completed' медиаплеера не доставляет ничего). Удаление сопоставляется по идентичности функции — храни ссылку на любой колбэк, который придётся удалять.

Note

нет ни once(), ни публичной отправки — только сам объект-владелец эмитит свои события. Добавление одного колбэка дважды вызывает его дважды. Удаление слушателя изнутри колбэка безопасно (отправка итерируется по снимку).

У кого он есть

  • 3D Scene / Node, 2D Scene2D / Node2D — события указателя (click, touchstart), события контактов физики
  • deviceresize
  • AudioPlayer / VideoPlayercompleted, loopReached
  • WebSocketopen, message, close, error

UI устроен иначе: методы on*

UI-элементы не используют addEventListener; они принимают колбэки через чейнящиеся методы on*, чтобы обработчики вставали в цепочку сборки:

TypeScript
UIButton('Play').onClick(() => start())          // UI: чейнящийся сеттер on*
ball.addEventListener('click', () => kick())     // сцены/узлы: addEventListener

Смотрите также