0

这是我经常遇到但似乎从未找到好的解决方案的情况。我有在翻转时稍微放大的动画剪辑,但如果您将鼠标悬停在动画剪辑的边缘,它就会停在那里并闪烁,不断接收 mouseOver 和 mouseOut 事件。你如何处理这个问题?同样,在补间动画剪辑或按钮的比例时通常会出现问题。

my_mc.addEventListener(MouseEvent.MOUSE_OVER, mOver);
my_mc.addEventListener(MouseEvent.MOUSE_OUT, mOut);

private function mOver(m:MouseEvent) {              
   TweenLite.to(m.target, .2, { scaleX:1.1, scaleY:1.1} );
}

private function mOut(m:MouseEvent) {
   TweenLite.to(m.target, .2, { scaleX:1, scaleY:1} );
}
4

1 回答 1

1

我知道你的意思:当剪辑扩展/收缩时,动画本身会生成不需要的输入事件,从而将光标移到剪辑调整大小的 hitTest 区域之上或之外。

几个想法:

  1. 覆盖一个清晰的精灵以充当按钮区域并缩放另一个包含内容的子对象。
    即,其鼠标输入事件被触发的对象保持不变的大小:只有视觉工件改变尺寸
  2. (更简单)在过渡期间移除事件处理程序,将它们重新添加到由 TweenLite 动画对象的 onComplete 属性触发的回调函数中:
my_mc.addEventListener(MouseEvent.MOUSE_OVER, _animate);
my_mc.addEventListener(MouseEvent.MOUSE_OUT, _animate);

private function _animate(event:MouseEvent):void
{
    var mc:Sprite = event.target as Sprite;        
    var animScale:Number = (event.type == MouseEvent.MOUSE_OVER) ? 2 : 1;

    TweenLite.to(mc, 0.5, {
        onStart: function():void {
            mc.removeEventListener(MouseEvent.MOUSE_OVER, _animate);
            mc.removeEventListener(MouseEvent.MOUSE_OUT, _animate);
        },
        scaleX: animScale, 
        scaleY: animScale,
        onComplete: function():void {
            mc.addEventListener(MouseEvent.MOUSE_OVER, _animate);
            mc.addEventListener(MouseEvent.MOUSE_OUT, _animate);
        } 
    });
}
于 2009-09-09T23:27:50.330 回答