Активация кнопки под мышью: как вы фиксируете событие OVER? - PullRequest
1 голос
/ 21 апреля 2009

Наблюдаемое поведение:

  1. У меня есть страница пользовательского интерфейса, скользящая по экрану.
  2. По завершении слайда активируйте кнопки.
  3. Если мышь уже над кнопкой, ролловер не происходит (поскольку MOUSE_OVER технически не произошло)

Желаемое поведение: 1, 2 тоже самое, но на 3 я вижу мой ролловер.

Есть ли способ легко сделать это, кроме чего-то грубого, например, отслеживать мышь и сравнивать ее положение со всеми диммерами кнопок?

Спасибо!

Ответы [ 4 ]

0 голосов
/ 28 ноября 2010

Вы можете изменить следующие свойства, когда пользовательский интерфейс перемещается вниз,

slidingUI.mousenabled = false
slidingUI.mousechildren = false

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

0 голосов
/ 22 апреля 2009

при инициализации кнопки я устанавливаю частную переменную _bounds:

_bounds = getBounds(this);

при активации я звоню:

if (isMouseOver()) doOver(true);

, а затем функция:

private function isMouseOver():Boolean {
    //trace ("isMouseOver:");
    var xBool:Boolean = _bounds.left < mouseX && mouseX < _bounds.right;    
    var yBool:Boolean = _bounds.top < mouseY && mouseY < _bounds.bottom;
    //trace (" - xBool: " + xBool);
    //trace (" - yBool: " + yBool);
    return xBool && yBool;
}
0 голосов
/ 16 июня 2009

Вы можете установить параметр по умолчанию для вашей мыши над обработчиком, так что вам не нужно создать и отправить новое событие для запуска того же кода.

, например

myBtn.addEventListener(MouseEvent.MOUSE_OVER, btnOverHandler);

function btnOverHandler(e:MouseEvent = null):void{
trace('do stuff on roll over!');
}

//then you can do this wherever you need
btnOverHandler();

должно работать в обеих ситуациях (MouseEvent или нет).

и для наведения мыши getObjectsUnderPoint может быть полезным. Это больше, чем нужно для этого конкретного примера (и немного длиннее), но полезно знать, что оно существует.

1012 *, например *

function isMouseOver(target:DisplayObject,container:DisplayObjectContainer):Boolean{
   var isOver:Boolean = false;
   var pt:Point = new Point(mouseX, mouseY);
   var objects:Array = container.getObjectsUnderPoint(pt);
   for(var i:int = 0 ; i < objects.length; i++){
      if(objects[i] == target) {
         isOver = true;
         break;
      }
   }
   return isOver;
}

Надеюсь, это поможет.

0 голосов
/ 21 апреля 2009

Вы можете отправить событие mouseMove в ваш самый верхний контейнер с координатами x и y текущей позиции мыши. Это будет эмулировать эффект перемещения пользователем мыши.

private function moveComplete():void
{
    topLevelContainer.dispatchEvent(new MouseEvent(MouseEvent.MOUSEMOUSE, true, false, topLevelContainer.mouseX, topLevelContainer.mouseY);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...