当鼠标没有离开时发送鼠标离开事件

dispatch mouse out event when the mouse not out

我创建了一个工具提示 class。 当鼠标悬停在 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 功能同时启用并且提示闪烁。

显然,您的工具提示遮盖了底层 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;
    }

}

尝试使用

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

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

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

要防止这种情况,请执行以下操作:

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