![]() |
|
||||||||||
|
|||||
|
Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
|
В 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);
}
}
}
Нажать и отпустить кнопку мыши над кругом (объект circle): Нажать кнопку мыши над кругом, а отпустить в другом месте: Примечание: вместо того чтобы использовать переменную clicked, можно было бы в обработчике клика мышки mouseDown прописать слушателей на глобальный mouseUp, а в обработчике captureMouseUp удалить их. |
![]() |
Часовой пояс GMT +4, время: 05:27. |
|
|
« Предыдущая тема | Следующая тема » |
|
|