【问题标题】:dispatch mouse out event when the mouse not out鼠标未退出时调度鼠标退出事件
【发布时间】:2015-06-01 10:24:29
【问题描述】:

我创建了一个工具提示类。 当鼠标悬停在 MovieClip 上时,它启用,当它离开时,它禁用。 影片剪辑包含其他一些影片剪辑。 我的代码是:

to.addEventListener(MouseEvent.MOUSE_OVER, showTip);
to.addEventListener(MouseEvent.MOUSE_OUT, hideTip);
to.addEventListener(MouseEvent.MOUSE_MOVE, MoveTip);

功能是:

private function showTip(evt: MouseEvent) {
        if (tip != null && !tip.visible) {
            tip.x = evt.stageX;
            tip.y = evt.stageY;
            tip.visible = true;
        }
    }

    private function hideTip(evt: MouseEvent) {
        if (tip != null && tip.visible) {
            tip.visible = false;
        }
    }

    private function MoveTip(evt: MouseEvent) {
        if (tip != null && tip.visible) {
            tip.x = evt.stageX;
            tip.y = evt.stageY;
        }

    }

它的工作,但有时 hideTip 功能和 showTip 功能同时启用,并且提示闪烁。

【问题讨论】:

  • 所有答案都很有趣,但将工具提示设置为不接收鼠标事件更容易。
  • @BotMaster 我会说它更好,而不是更容易,因为工具提示不应该是交互式设计的。但情况并非总是如此,例如,在 TD 游戏中存在“交互式”工具提示,例如塔的升级菜单,因此这种解决方案并不总是可以接受的。对于工具提示中只有文本的情况,这就足够了。
  • 通常这样做:工具提示不接收鼠标事件(没有意外行为),悬停对象实现 IReceiveToolTip 接口(以验证它确实接受工具提示),该接口也应该强制执行它应该显示的文本(由接收对象实现),当工具提示显示计时器触发时,如果计时器用完并且指针仍在工具提示之上,则工具提示接收鼠标事件并接受用户输入。这是相当标准的,并且被证明可以排除意外行为。
  • @BotMaster 我必须阅读有关该界面的信息,我还没有开发自己的工具提示自行车,所以这是一些需要的数据。

标签: actionscript-3 events tooltip mouseevent mouseover


【解决方案1】:

显然您的工具提示掩盖了底层的to 电影剪辑,从而有效地使Flash 认为鼠标不在to MC 之外,从而触发鼠标退出侦听器。一种可能的解决方案是将tip 移离鼠标光标,而不是显示在鼠标位置的正上方。

const offsetX:Number=4;
const offsetY:Number=4; // experiment with these  
private function showTip(evt: MouseEvent) {
    if (tip != null && !tip.visible) {
        tip.x = evt.stageX+offsetX;
        tip.y = evt.stageY+offsetY;
        tip.visible = true;
    }
}

private function MoveTip(evt: MouseEvent) {
    if (tip != null && tip.visible) {
        tip.x = evt.stageX+offsetX;
        tip.y = evt.stageY+offsetY;
    }

}

【讨论】:

    【解决方案2】:

    尝试使用

    to.addEventListener(MouseEvent.ROLL_OVER, showTip);
    to.addEventListener(MouseEvent.ROLL_OUT, hideTip);
    

    这避免了调度事件的问题,如果鼠标发生变化,例如在一个区域中的字母和透明度之间或同一工具提示目标的子项之间,应该完全有一个工具提示。对不起我的英语。希望能帮助到你。问候

    【讨论】:

      【解决方案3】:

      正如@BotMaster 和@Vesper 所建议的,tip 会显示在鼠标下方,这会导致MouseEvent.MOUSE_OUT 被触发。

      为防止这种情况发生,请执行以下操作:

      tip.mouseEnabled = false;
      tip.mouseChildren = false;
      

      【讨论】:

      • 咳咳,我提出了这个建议,而且看起来很成功,但你解决这种行为的方法比我的好一点。
      • 抱歉@Vesper 没有给予适当的信任。我迅速浏览了答案,并没有注意到任何enabled 代码,因此假设 BotMaster 的评论是唯一的建议。
      猜你喜欢
      • 2011-06-09
      • 2010-10-22
      • 2011-05-06
      • 1970-01-01
      • 2012-02-22
      • 2015-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多