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

时间:2016-05-24 23:08:00

标签: actionscript-3 textfield mouseover

我有一个代表标签的水平堆栈按钮,每个按钮内部都有一个TextField,大于按钮的尺寸,以便它们重叠。像这样(虚线是TextField,红色框是鼠标悬停因重叠而不起作用的区域:

enter image description here

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

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不会阻止任何重叠的鼠标输入?

我已经上传了我用here测试过的FLA和AS。如果您运行它,它将在您翻转特定按钮时跟踪。如果你试图将鼠标悬停在最左边按钮的红色区域上,那么它将无法正常工作。

1 个答案:

答案 0 :(得分:1)

您的按钮有三个movieClip,mcHitZone,mcText和TabButton本身。 所以当你关闭两个按钮时,up tabButton(不是它的Child mcText)会影响下tabButton。

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

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