Руководство по actionscript. часть 2, стр. 058

Bubbles;Boolean = false.

cancel able:Boolean = false.

isOn:Boolean = false) { // Передаем параметры конструктора в конструктор суперкласса super(type. bubbles, cancelable);

// Запоминаем состояние переключателя, которое может быть использовано // в приемниках события ToggleEvent. TOGGLE this. isOn = isOn;

}

// Любой класс пользовательского события должен переопределить // метод clone( )

public override function clone( ):Event { return new ToggleEvent(type. bubbles, cancelable. isOn);

}

// Любой класс пользовательского события должен переопределить // метод toString( ). Обратите внимание, что «eventPhase» — это // переменная экземпляра, имеющая отношение к цепочке диспетчеризации // событий (гл. 21).

public override function toString( ):String { return formatToString(«ToggleEvent». «type», «bubbles».

«cancelable». «eventPhase». «isOn»);

}

}

}

Теперь перейдем к классу ToggleSwitch, который представляет кнопку-переключатель. Единственный метод toggle ( ) класса ToggleSwitch изменяет состояние кнопки-переключателя, а затем выполняет диспетчеризацию события ToggleEvent. TOGGLE, которое обозначает изменение состояния переключателя. Следующий код демонстрирует класс ToggleSwitch. Обратите внимание, что класс ToggleSwitch расширяет класс Sprite, предоставляющий возможности для отображения объекта на экране. Кроме того, класс Sprite, являясь потомком класса EventDispatcher, предоставляет необходимую функциональность для диспетчеризации событий:

package { import flash. display.*; import flash. events.*;

// Представляет простой элемент-переключатель public class ToggleSwitch extends Sprite {

// Запоминает состояние переключателя

private var isOn:Boolean;

// Конструктор

public function ToggleSwitch ( ) { // По умолчанию переключатель выключен isOn = false;

}

// Включает переключатель, если он был выключен, или // выключает его

public function toggle ( ):void { // Изменяет состояние переключателя isOn = MsOn;

// просим среду Flash выполнить диспетчеризацию // события ToggleEvent. TOGGLE, получателем которого // является данный объект ToggleSwitch dispatchEvent(new ToggleEvent(ToggleEvent. TOGGLE,

true.

Руководство по actionscript. часть 2, стр. 059

False.

isOn));

}

}

}

Чтобы продемонстрировать использование события ToggleEvent. TOGGLE, создадим простой класс SomeApp. Этот класс определяет метод toggleListener ( ) и регистрирует его в объекте ToggleSwitch для событий ToggleEvent. TOGGLE. Кроме того, для демонстрационных целей класс SomeApp программным путем включает переключатель, вызывая событие ToggleEvent. TOGGLE.

package { import flash. display.*;

// Простое приложение, демонстрирующее применение // пользовательского события ToggleEvent. TOGGLE public class SomeApp extends Sprite { // Конструктор

public function SomeApp ( ) { // Создание объекта ToggleSwitch var toggleSwitch:ToggleSwitch = new ToggleSwitch( ); // Регистрация приемника для событий ToggleEvent. TOGGLE toggleSwi tch. addEventLi stener(ToggleEvent. TOGGLE.

toggleListener);

// Изменяем состояние переключателя (обычно состояние // изменяется пользователем, но для демонстрационных целей // мы изменяем состояние программным путем) toggleSwitch. toggle( );

}

// Приемник выполняется каждый раз при возникновении события // ToggleEvent. TOGGLE

private function toggleListener (e:ToggleEvent):void { if (e. isOn) {

traceCThe ToggleSwitch is now on.»); } else {

trace(«The ToggleSwitch is now off.»);

}

}

}

}

Теперь, когда мы приобрели опыт создания пользовательских событий, рассмотрим более сложный сценарий: пользовательское событие со стандартным поведением.

Руководство по actionscript. часть 2, стр. 060

Отмена стандартного поведения для пользовательских событий

В предыдущем разделе рассказывалось, что некоторые предопределенные события характеризуются стандартным поведением. Например, стандартное поведение события TextEvent. TEXT INPUT заключается в добавлении текста в текстовое поле. Мы также знаем, что для предопределенных событий, которые относятся к категории отменяемых, избежать стандартного поведения можно с помощью метода экземпляра preventDefault ( ) класса Event.

Кроме того, пользовательские события могут характеризоваться определенным стандартным поведением, избежать которого можно также с помощью метода preventDefault ( ). Стандартное поведение пользовательского события полностью определяется и реализуется в программе. Общий подход, применяемый для создания событий с отменяемым стандартным поведением, заключается в следующем.

1. На этапе диспетчеризации события создать событийный объект, представляющий событие, передав в качестве параметра отменяемое конструктора класса Event значение true.

2. Использовать метод dispatchEvent ( ) для диспетчеризации события.

3. После завершения метода dispatchEvent ( ) использовать метод экземпляра isDef aultPrevented ( ) класса Event, чтобы определить, запрашивали ли приемники отмену стандартного поведения.

4. Если метод is Default Prevented ( ) событийного объекта вернет значение false, продолжать выполнение действий, относящихся к стандартному поведению; в противном случае не выполнять действий, относящихся к стандартному поведению.

Рассмотрим обобщенный код для создания события с отменяемым стандартным поведением:

// Создание событийного объекта с произвольными значениями для параметров // тип и всплывающее. Для параметра отменяемое (третий параметр) указывается // значение true.

var e:Event = new Event(7″*f/7. всплывающее, true);

// Диспетчеризация события dispatchEvent(e);

// Проверить, запрашивали ли приемники отмену стандартного поведения.

// Если приемники не вызывали метод preventDefault( )____

if (!e. isDefaultPrevented( )) {

// …выполняем действия, относящиеся к стандартному поведению } .

Руководство по actionscript. часть 2, стр. 061

Рассмотрим описанные шаги на примере с кнопкой-переключателем. Предположим, мы используем нашу кнопку-переключатель в приложении с панелью управления, которое назначает различные привилегии своим пользователям в зависимости от их статуса. Пользователи-«гости» могут использовать только некоторые

кнопки на панели, в то время как пользователям-«администраторам» доступны все кнопки.

Для реализации различных уровней доступа в приложении мы определяем новый тип события кнопки-переключателя: ToggleEvent. TOGGLE_ATTEMPT. Это событие возникает всякий раз, когда пользователь пытается включить или выключить кнопку-переключатель. Стандартным поведением, характеризующим событие ToggleEvent. TOGGLE_ATTEMPT, является изменение состояния переключателя.

Для упрощения будем считать, что кнопку-переключатель можно включить или выключить только щелчком кнопки мыши (не используя клавиатуру). Всякий раз, когда пользователь щелкает на кнопке-переключателе, выполняется диспетчеризация события ToggleEvent. TOGGLE_ATTEMPT. Затем, если никакой приемник не отменяет стандартного поведения, мы изменяем состояние переключателя. Рассмотрим соответствующий код:

private function clickListener (e:MouseEvent):void { // Пользователь попытался включить или выключить переключатель, поэтому // просим среду Flash выполнить диспетчеризацию события // ToggleEvent. TOGGLE_ATTEMPT. получателем которого является данный объект // ToggleSwitch. Сначала создадим событийный объект… var toggleEvent:ToggleEvent =

new ToggleEvent(ToggleEvent. TOGGLE_ATTEMPT. true, true);

// … затем отправляем запрос на диспетчеризацию события dispatchEvent(toggleEvent);

// Диспетчеризация события Toggl eEvent. TOGGLE_ATTEMPT завершена. // Если никакой приемник не отменил стандартное поведение события… if (ItoggleEvent. isDefaultPrevented( )) {

// …изменяем состояние переключателя

toggle( );

}

}

В нашем приложении с панелью управления мы регистрируем приемник события ToggleEvent. TOGGLE_ATTEMPT для каждого объекта ToggleSwitch. Внутри этого приемника проверяется статус пользователя. Для закрытых переключателей, если пользователь является «гостем», мы отменяем стандартное поведение события. Рассмотрим этот код:

// Приемник выполняется всякий раз. когда возникает событие // ToggleEvent. TOGGLE_ATTEMPT

private function toggleAttemptListener (e:ToggleEvent):void { // Если пользователь является «гостем»… if (userType == UserType. GUEST) {

// …запретить изменение состояния переключателя

e. preventDefaultC );

В листинге 12.5 целиком показан код приложения с панелью управления, включая полнофункциональную, хотя и простую графическую версию кнопки-переключателя. Понять этот код вам помогут подробные комментарии.

Руководство по actionscript. часть 2, стр. 062

Листинг 12.5. Классы приложения с панелью управления

// Класс ToggleEvent package { import flash. events.*;

// Класс, представляющий пользовательское событие «toggle» public class ToggleEvent extends Event {

// Константа для типа события «toggle»

public static const TOGGLE:String = «toggle»;

// Константа для типа события «toggleAttempt»

public static const TOGGLE_ATTEMPT:String = «toggleAttempt»;

// Обозначает текущее состояние переключателя -// включен или выключен public var isOn:Boolean;

// Конструктор

public function ToggleEvent (type:String.

bubbles’.Boolean = false.

cancelable:Boolean = false.

isOn:Boolean = false) { // Передаем параметры конструктора в конструктор суперкласса super(type, bubbles, cancelable);

// Запоминаем состояние переключателя, которое может быть использовано // в приемниках события ToggleEvent. TOGGLE this. isOn = isOn;

}

// Любой класс пользовательского события должен переопределить // метод clone( )

public override function clone( )’.Event { return new ToggleEvent(type, bubbles, cancelable. isOn);

}

// Любой класс пользовательского события должен переопределить // метод toString( )

public override function toString( ):String { return formatToString(«ToggleEvent». «type», «bubbles».

Руководство по actionscript. часть 2, стр. 063

«cancelable». «eventPhase». «isOn»);

}

}

// Класс ToggleSwitch package {

import flash. display.*; import flash. events.*;

// Представляет простую кнопку-переключатель со стандартным поведением public class ToggleSwitch extends Sprite {

// Запоминает состояние переключателя.

private var isOn:Boolean;

// Содержит графическое изображение кнопки-переключателя private var icon.-Sprite;

// Конструктор

public function ToggleSwitch ( ) { // Создаем объект Sprite, который будет содержать графическое // изображение кнопки-переключателя icon = new Sprite( ); addChild(icon);

// По умолчанию переключатель выключен isOn = false; drawOffState( );

// Регистрируем приемник для получения уведомлений всякий раз.

Советы web-дизайнеру

Каждый специалист имеет свои секреты, который он применяет в своей работе. Так и дизайнеры имеют свои маленькие секреты.
Вот некоторые из них:
1. Использование изображений должно быть оправдано, они должны быть дополнением в тему, а не лишь бы что влепить;
2. В изображении должно максимальное значение соотношения качество-размер; Прочитать остальную часть записи »

Руководство по actionscript. часть 2, стр. 064

// Если пользователь щелкнет кнопкой мыши

// на графическом изображении переключателя

icon. addEventLi stener(MouseEvent. CLICK, cli ckLi stener);

}

// Приемник, выполняемый после щелчка кнопкой мыши // на кнопке-переключателе

private function clickListener (e:MouseEvent):void { // Пользователь попытался включить или выключить переключатель. // поэтому просим среду Flash выполнить диспетчеризацию // события ToggleEvent. TOGGLE_ATTEMPT. получателем которого // является данный объект ToggleSwitch. Сначала создадим // событийный объект… var toggleEvent:Toggl eEvent =

new ToggleEvent(ToggleEvent. TOGGLE_ATTEMPT. true, true);

// …затем отправляем запрос на диспетчеризацию события dispatchEvent(toggleEvent);

// Диспетчеризация события ToggleEvent. TOGGLE_ATTEMPT завершена. // Если никакой приемник не отменил стандартное поведение события… if (!toggleEvent. isDefaultPrevented( )) {

// …изменяем состояние переключателя

toggle( );

}

}

// Включает переключатель, если в настоящий момент он выключен, или

// выключает его. если переключатель включен. Стоит отметить, что состояние

// переключателя может быть изменено программным путем, даже если пользователь // не имеет привилегий изменить состояние переключателя вручную, public function toggle ( ):void {

// Изменяем состояние переключателя

isOn = IisOn;

// Рисуем для нового состояния переключателя соответствующее изображение if (isOn) {

drawOnState( ); } else {

drawOffState( );

}

// Просим среду Flash выполнить диспетчеризацию события // ToggleEvent. TOGGLE, получателем которого является данный // объект ToggleSwitch

var toggleEvent:ToggleEvent = new ToggleEvent(ToggleEvent. TOGGLE.

Руководство по actionscript. часть 2, стр. 065

True, false. isOn);

dispatchEvent(toggleEvent);

}

// Рисуем изображение для выключенного состояния private function drawOffState ( ):void {

icon. graphics. clear( );

icon. graphics. lineStyle(l);

icon. graphics. beginFill(OxFFFFFF);

icon. graphics. drawRect(0. 0. 20. 20);

}

// Рисуем изображение для включенного состояния private function drawOnState ( ):void {

icon. graphics. clear( );

i con. g raphi cs.1i neSty1e(1);

icon. graphics. beginFill(OxFFFFFF);

icon. graphics. drawRect(0. 0. 20. 20);

icon. graphics. beginFill(0×000000);

icon. graphics. drawRect(5. 5. 10. 10);

}

}

}

// Класс Control Panel (основной класс приложения) package { import flash. display.*;

// Базовое приложение, которое демонстрирует отмену // стандартного поведения для пользовательских событий public class ControlPanel extends Sprite {

// Присваиваем уровень привилегий для пользователя данного приложения.

Руководство по actionscript. часть 2, стр. 066

// В данном примере только пользователи с привилегиями UserType. ADMIN

// могут использовать кнопку-переключатель.

private var userType:int = UserType. GUEST;

// Конструктор

public function Control Panel ( ) { // Создаем объект ToggleSwitch var toggleSwitch:ToggleSwitch = new ToggleSwitch( ); // Регистрируем приемник для событий // ToggleEvent. TOGGLE_ATTEMPT

toggleSwi tch. addEventLi stener(ToggleEvent. TOGGLE_ATTEMPT.

toggleAttemptListener);

// Регистрируем приемник для событий ToggleEvent. TOGGLE toggleSwi tch. addEventLi stener(ToggleEvent. TOGGLE,

toggleListener); // Добавляем кнопку-переключатель в иерархию отображения // данного объекта addChi1dCtoggleSwitch);

}

// Приемник выполняется всякий раз. когда возникает событие // ToggleEvent. TOGGLE_ATTEMPT

private function toggleAttemptListener (e:ToggleEvent):void { // Если пользователь является «гостем»… if (userType == UserType. GUEST) {

// …запретить изменение состояния переключателя

e. preventDefault( );

}

}

// Приемник выполняется всякий раз. когда возникает событие // ToggleEvent. TOGGLE

private function toggleListener (e:ToggleEvent):void { if (e. isOn) {

traceC’The ToggleSwitch is now on.»); } else {

trace(«The ToggleSwitch is now off.»);

}

}

}

// Класс UserType package {

// Определяет константы, представляющие уровни // пользовательских привилегий в приложении // с панелью управления public class UserType {

public static const GUEST:int =0;

public static const ADMIN:int = 1;

}

} •

Теперь, когда мы познакомились с пользовательскими событиями в ActionScript, рассмотрим две последние темы, связанные с событиями.



Полезные ссылки
Случайные записи
  • 17.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.11
  • 10.06.2012">На пресс-конференции Google показала новые возможности Google Maps
  • 18.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.105
  • 18.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.61
  • 07.03.2011">Руководство по actionscript. часть 4, стр. 122
  • 14.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.80
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 056
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.77
  • 25.03.2010">Великолепная инфографика на 5+
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.82
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.70
  • 25.07.2011">Прикольные статусы на каждый день
  • 11.03.2011">Руководство по actionscript. часть 4, стр. 001
  • 03.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.41
  • 18.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.82
Опрос

Какие цвета вы предпочитаете?

View Results

Loading ... Loading ...