激活鼠标下方的按钮:如何捕获OVER事件?

时间:2009-04-20 20:38:42

标签: flash actionscript-3

观察到的行为:

  1. 我有一页UI滑动到屏幕上。
  2. 在幻灯片完成时,激活按钮。
  3. 如果鼠标已经超过按钮,则不会发生翻转(因为技术上没有发生MOUSE_OVER)
  4. 所需行为: 1,2相同,但在3,我看到我的翻转。

    除了跟踪鼠标并将其位置与所有按钮变暗进行比较之外,还有什么方法可以轻松地做到这一点吗?

    谢谢!

4 个答案:

答案 0 :(得分:0)

您可以使用当前鼠标位置的x和y坐标将mouseMove事件调度到最顶层的容器。这将模拟用户移动鼠标的效果。

private function moveComplete():void
{
    topLevelContainer.dispatchEvent(new MouseEvent(MouseEvent.MOUSEMOUSE, true, false, topLevelContainer.mouseX, topLevelContainer.mouseY);
}

答案 1 :(得分:0)

按钮init上的

我设置了私有var _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;
}

答案 2 :(得分:0)

您可以为处理程序设置鼠标的默认参数,因此您不需要 创建和分派新事件以运行相同的代码。

e.g。

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可以很方便。它不仅仅是你对这个特定例子所需要的东西(并且有点冗长),但是要知道它存在的东西是好的。

e.g。

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;
}

希望这有帮助。

答案 3 :(得分:0)

当UI向下滑动时,您可以更改以下属性

slidingUI.mousenabled = false
slidingUI.mousechildren = false

这将在组件滑动时启用下方按钮上的翻转事件。确保之后将属性重置为true。 不确定这是否是你想要的,但它可以派上用场。