ГлавнаяActionScript 3 — «100 советов» › Реализация onReleaseOutside в AS3

Реализация onReleaseOutside в AS3

June 19th, 2006
В ActionScript 3 нет события onReleaseOutside, но его можно реализовать самостоятельно. Поскольку события mouseDown и mouseUp привязаны к объекту, то узнать о том, что кнопка мышки была отпущена за пределами объекта можно только слушая событие mouseUp глобально (см. предыдущий совет). Единственное, нужно добавить проверку отпустили кнопку мыши над тем же объектом (тогда это будет просто mouseUp) или над другим (тогда это будет onReleaseOutside).
Пример:

Код:
// в этой переменной запоминаем ссылку на объект по которому кликнули var clicked:DisplayObject; var circle:Sprite = new Sprite(); circle.graphics.beginFill(0x4080A0); circle.graphics.drawCircle(50, 50, 25); addChild(circle); function mouseDown(evt:MouseEvent):void { trace("mouseDown"); clicked = circle; } function mouseUp(evt:MouseEvent):void { trace("mouseUp"); } function mouseUpOutside(evt:MouseEvent):void { trace("mouseUpOutside"); } // обработчик события на клик мышкой по объекту circle circle.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown); // обработчики событий для глобального mouseUp (подробнее см. предыдущий совет) stage.addEventListener(MouseEvent.MOUSE_UP, captureMouseUp); stage.addEventListener(MouseEvent.MOUSE_UP, captureMouseUp, true); function captureMouseUp(evt:MouseEvent):void { if (evt.eventPhase == EventPhase.BUBBLING_PHASE) return; // убедимся, что кликнули по нужному нам объекту if (clicked == circle) { clicked = null; // очищаем ссылку для следующих кликов var target:Sprite = evt.target as Sprite; // отпустили кнопку над circle if (target == circle) { mouseUp(evt); }else{ // отпустили кнопку мыши вне circle mouseUpOutside(evt); } } }

В этом примере мы реализовали аналог событий onPress, onRelease, и onReleaseOutside из AS1 и AS2.
Нажать и отпустить кнопку мыши над кругом (объект circle):

Код:
//output mouseDown mouseUp

Нажать кнопку мыши над кругом, а отпустить в другом месте:

Код:
//output mouseDown mouseUpOutside

Примечание: вместо того чтобы использовать переменную clicked, можно было бы в обработчике клика мышки mouseDown прописать слушателей на глобальный mouseUp, а в обработчике captureMouseUp удалить их.

Категория: ActionScript 3 — «100 советов» Ярлыки: ,

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

Глобальные события Flash 9: Document Class
  1. Пока без комментариев.
  1. Пока нету.