如何处理具有重叠 TextField 的鼠标悬停事件?

How do you handle mouseover events with overlapping TextFields?

我有一排代表选项卡的水平按钮,每个按钮内部都有一个 TextField,它比按钮的尺寸大,因此它们重叠。像这样(虚线是TextField,红框是由于重叠而鼠标悬停不起作用的区域):

这些按钮中的每一个都是 TabButton 的实例,它具有如下 class 定义:

package src
{
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.text.TextField;

    public class TabButton extends MovieClip
    {
        // Stage Instances
        public var mcHitZone:MovieClip;
        public var mcText:TextField;

        public function TabButton()
        {
            super();

            addEventListener(Event.ADDED_TO_STAGE, onAddedToStage, false, 0, true);
        }

        private function onAddedToStage(e:Event):void
        {
            removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);

            // Disable mouse input on everything except for the hit zone since that's where mouse handling should be done.
            mcText.mouseEnabled = false;

            mcHitZone.addEventListener(MouseEvent.ROLL_OVER, onMouse, false, 0, true);
        }

        private function onMouse(e:MouseEvent):void
        {
            trace("Mouse event: " + name + " " + e.type);
        }
    }
}

每个 TabButton 都有一个 mcHitZone,我将鼠标处理程序附加到它,这是上图中的黑色区域。由于 TextField 比按钮本身大得多,因此在处理鼠标输入时需要完全忽略它,因此我使用 mcText.mouseEnabled = false; 将其关闭,这似乎在单个按钮内使用鼠标时有效,但是当鼠标悬停在重叠区域(红色框)上时,TextField 将阻止来自另一个按钮的鼠标输入。

有什么方法可以使它工作,以便 TextField 不会阻止鼠标输入与其重叠的任何内容?

我已经上传了 FLA 和 AS,我一直在用 here 测试它。如果您 运行 它,它会在您滑过特定按钮时进行跟踪。如果您尝试将鼠标悬停在最左边按钮的红色区域上,则它将不起作用。

您的按钮有三个影片剪辑、mcHitZone、mcText 和 TabButton 本身。 因此,当您关闭两个按钮时,向上的 tabButton(不是 Child mcText)将影响下方的 tabButton。

我建议你的tabButton不要扩展movieClip,只使用mcHitZone作为Button的皮肤,然后将它添加到你的舞台上。

正如评论所说,您也可以将tabButton 的mouseEnabled 设置为false。我混淆了 mouseEnabled 和 mouseChildren。