Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Цели событий являются важным компонентом модели событий во Flash® Player и Adobe AIR. Цель события является основным фактором, определяющим прохождение потока событий по иерархии списка отображения. Когда происходит такое событие, как щелчок мыши или нажатие клавиши, объект Event отправляется в поток событий из корня списка отображения. Объект Event проходит путь к цели события и обратно, разделенный на три фазы: фаза захвата от корня к последнему узлу перед целевым узлом события; фаза цели включает только целевой узел события; а фаза восходящей цепочки включает все последующие узлы на пути обратно к корневому узлу списка отображения.
Как правило, чтобы дать определенному пользователем классу возможность отправлять события, проще всего расширить класс EventDispatcher. Если это невозможно (например, если класс уже расширяет другой класс), можно внедрить интерфейс IEventDispatcher, создайте элемент EventDispatcher и создайте простые процедуры для направления вызовов в собранный EventDispatcher.
Метод | Определено | ||
---|---|---|---|
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Регистрирует объект прослушивателя события на объекте EventDispatcher для получения прослушивателем уведомления о событии. | IEventDispatcher | ||
Посылает событие в поток событий. | IEventDispatcher | ||
Проверяет, имеет ли объект EventDispatcher прослушиватели, зарегистрированные для определенного типа события. | IEventDispatcher | ||
Удаляет прослушиватель из объекта EventDispatcher. | IEventDispatcher | ||
Проверяет, зарегистрирован ли прослушиватель события для указанного типа события с данным объектом EventDispatcher или любым его предшественником. | IEventDispatcher |
addEventListener | () | метод |
public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Регистрирует объект прослушивателя события на объекте EventDispatcher для получения прослушивателем уведомления о событии. Можно регистрировать прослушиватели событий в любом узле из списка отображения для каждого типа события, фазы и приоритета.
После успешной регистрации прослушивателя событий невозможно изменить его приоритет путем дополнительных вызовов addEventListener()
. Для изменения приоритета прослушивателя следует вначале вызвать removeEventListener()
. Затем можно снова зарегистрировать прослушиватель с новым приоритетом.
После регистрации прослушивателя последующие вызовы addEventListener()
со значениями, отличающимися от type
и useCapture
приводят к его отдельной регистрации. Например, прослушиватель, изначально зарегистрированный со значением useCapture
, равным true
, прослушивает только во время фазы захвата. После повторного вызова addEventListener()
с помощью аналогичного объекта прослушивания, но со значением useCapture
, равным false
, активными становятся два отдельных прослушивателя: один прослушивает во время фазы захвата, второй – во время целевой фазы и фазы восходящей цепочки.
Невозможно зарегистрировать прослушиватель события только для целевой фазы или для фазы восходящей цепочки. Эти фазы соединены при регистрации, поскольку восходящая цепочка применяется только к предшественникам целевого узла.
При отсутствии необходимости в прослушивателе события он может быть удален с помощью вызова EventDispatcher.removeEventListener()
; в противном случае могут возникнуть проблемы с памятью. Объекты с зарегистрированными прослушивателями события автоматически не удаляются из памяти, поскольку сборщик мусора не удаляет объекты, на которые имеются ссылки.
Копирование экземпляра EventDispatcher не приводит к копированию прослушивателей событий, присоединенных к нему. (Если для вновь создаваемого узла требуется прослушиватель событий, его необходимо присоединить после создания узла.) При этом при перемещении экземпляра EventDispatcher присоединенные к нему прослушиватели событий перемещаются вместе с ним.
Прослушиватель событий, регистрируемый на узле, на котором в это время обрабатывается событие, не запускается в ходе текущей фазы, но может быть запущен в потоке событий более поздней фазы, например фазы восходящей цепочки.
Прослушиватель событий, удаленный из узла во время обработки события на этом узле, будет запускаться текущими операциями. После удаления прослушиватель событий никогда не вызывается повторно (если только он не был повторно зарегистрирован для будущей обработки).
Параметры
type:String — Тип события.
| |
listener:Function — Функция прослушивателя, обрабатывающая событие. Эта функция принимает объект события как единственный параметр и ничего не возвращает, например:
| |
useCapture:Boolean (default = false ) — Определяет, работает ли прослушиватель в фазе захвата или в целевой фазе и в фазе восходящей цепочки. Если значение useCapture равно true , прослушиватель обрабатывает событие только во время фазы захвата, но не во время целевой фазы или фазы восходящей цепочки. Если значение useCapture равно false , то прослушиватель обрабатывает событие только в целевой фазе или фазе восходящей цепочки. Для прослушивания события во всех трех фазах следует дважды вызвать addEventListener() , первый раз с useCapture , равным true , а второй раз с useCapture , равным false .
| |
priority:int (default = 0 ) — Уровень приоритета прослушивателя событий. Приоритеты обозначены 32-разрядным целым числом. Чем больше число, тем выше приоритет. Все прослушиватели с приоритетом n обрабатываются перед обработкой прослушивателей с приоритетом n-1. Прослушиватели с одинаковым приоритетом обрабатываются в порядке их добавления. Значение приоритета по умолчанию равно 0.
| |
useWeakReference:Boolean (default = false ) — Определяет, является ли ссылка на прослушиватель «сильной» или «слабой». «Сильная» ссылка (по умолчанию) предотвращает удаление прослушивателя сборщиком мусора. «Слабая» ссылка позволяет удалить прослушиватель. Функции элементов уровня класса не подлежат удалению в качестве мусора, вследствие чего можно установить |
dispatchEvent | () | метод |
public function dispatchEvent(event:Event):Boolean
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Посылает событие в поток событий. Адресатом события является объект EventDispatcher, в котором вызывается dispatchEvent()
.
Параметры
event:Event — Объект события, переданный в поток событий.
|
Boolean — Значение равно true до тех пор, пока preventDefault() не будет вызван для события; в этом случае возвращается значение false .
|
hasEventListener | () | метод |
public function hasEventListener(type:String):Boolean
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Проверяет, имеет ли объект EventDispatcher прослушиватели, зарегистрированные для определенного типа события. Это позволяет определить, где объект EventDispatcher изменил обработку типа события в иерархии потока событий. Для определения, действительно ли определенный тип события запускает прослушиватель события, следует использовать IEventDispatcher.willTrigger()
.
Различие между hasEventListener()
и willTrigger()
заключается в том, что hasEventListener()
анализирует только объект, к которому он принадлежит, тогда как willTrigger()
— весь поток событий для события, указанного параметром type
.
Параметры
type:String — Тип события.
|
Boolean — Значение true , если прослушиватель указанного типа зарегистрирован; в противном случае – false .
|
Связанные элементы API
removeEventListener | () | метод |
public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Удаляет прослушиватель из объекта EventDispatcher. При отсутствии прослушивателя, зарегистрированного с объектом EventDispatcher, вызов этого метода не оказывает эффекта.
Параметры
type:String — Тип события.
| |
listener:Function — Удаляемый объект прослушивателя.
| |
useCapture:Boolean (default = false ) — Указывает, был ли слушатель зарегистрирован для фазы захвата или целевой фазы и фазы восходящей цепочки. Если прослушиватель был зарегистрирован для фазы захвата, целевой фазы и фазы восходящей цепочки, необходимо удалить оба вызова removeEventListener() : один вызов с useCapture , равным true , и второй вызов с useCapture , равным false .
|
willTrigger | () | метод |
public function willTrigger(type:String):Boolean
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Проверяет, зарегистрирован ли прослушиватель события для указанного типа события с данным объектом EventDispatcher или любым его предшественником. Этот метод возвращает значение true
, если прослушиватель события запускается в течение любой фазы потока событий, когда событие указанного типа передается объекту EventDispatcher или любому из его нижестоящих элементов.
Различие между hasEventListener()
и willTrigger()
заключается в том, что hasEventListener()
анализирует только объект, к которому он принадлежит, тогда как willTrigger()
— весь поток событий для события, указанного параметром type
.
Параметры
type:String — Тип события.
|
Boolean — Значение равно true при запуске прослушивателя указанного типа; в противном случае значение равно false .
|
decorDispatcher
), затем с помощью переменной decorDispatcher
вызывается метод addEventListener()
с пользовательским событием doSomething
, которое затем обрабатывается методом didSomething()
, распечатывающим строку текста с помощью trace()
.
package { import flash.events.Event; import flash.display.Sprite; public class IEventDispatcherExample extends Sprite { public function IEventDispatcherExample() { var decorDispatcher:DecoratedDispatcher = new DecoratedDispatcher(); decorDispatcher.addEventListener("doSomething", didSomething); decorDispatcher.dispatchEvent(new Event("doSomething")); } public function didSomething(evt:Event):void { trace(">> didSomething"); } } } import flash.events.IEventDispatcher; import flash.events.EventDispatcher; import flash.events.Event; class DecoratedDispatcher implements IEventDispatcher { private var dispatcher:EventDispatcher; public function DecoratedDispatcher() { dispatcher = new EventDispatcher(this); } public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void{ dispatcher.addEventListener(type, listener, useCapture, priority); } public function dispatchEvent(evt:Event):Boolean{ return dispatcher.dispatchEvent(evt); } public function hasEventListener(type:String):Boolean{ return dispatcher.hasEventListener(type); } public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void{ dispatcher.removeEventListener(type, listener, useCapture); } public function willTrigger(type:String):Boolean { return dispatcher.willTrigger(type); } }
Tue Jun 12 2018, 11:34 AM Z