【问题标题】:Behavior of MOUSE_OVER eventListener in action-script-3actionscript-3 中 MOUSEOVER 事件侦听器的行为
【发布时间】:2011-10-03 04:55:09
【问题描述】:

如果在注册MOUSE_OVER 事件之前和期间鼠标悬停在一个对象上,它会触发吗?我问这个是因为它似乎不在我的程序中,我想知道这是否是所有MOUSE_OVER 事件的普遍行为。有没有办法解决这个问题?

我将避免在这里给出代码示例,因为我的程序庞大而复杂。

【问题讨论】:

    标签: actionscript-3 mouseover event-listener


    【解决方案1】:

    只要光标进入任何交互式DisplayObject 的边界,例如SpriteMovieClip,就会触发MOUSE_OVER 事件;这包括它的任何孩子(如果你想忽略孩子,请参阅ROLL_OVER)。

    同样,如果对象被添加到舞台并且当前恰好位于光标下,事件将调度。

    确保在 Flash Player 调度事件之前已注册您的事件侦听器非常重要 - 系统事件不会排队超过单个帧,因此不会为先前的活动调用任何处理程序。

    【讨论】:

    • 这样想:鼠标悬停时触发事件;它只是没有被抓住。您稍后注册的事实并不意味着新事件被触发。 (当然,你可以做一个命中测试来检查你是否需要。)
    • 是的,这很有意义,当鼠标悬停在对象上时,MOUSE_OVER 事件不会重复调度,它只会发生一次,并且当时没有注册事件侦听器来检索它.那么是否有可能使事件重新调度?我进入动作脚本一个月了,所以我有点无能为力
    • 不幸的是,我不相信有一种“好”的方法可以做到这一点。您必须编写代码来检索光标的位置并自省 DisplayList 以做出决定。一个简单的技巧可能是在注册事件侦听器后删除并立即将特定的 DisplayObject 添加回 DisplayList,从而强制重新调度。但是,如果可能的话,看看你是否能找到一个解决方案,让你事先注册事件监听器。
    • Colin,避免错过 mouseover 事件的最简单方法应该是在启动时(或在创建显示对象时)注册它们,然后在需要它们之前忽略它们,而不是稍后再注册。接受这个答案也可能是个好主意;)
    最近更新 更多