【问题标题】:How do you handle mouseover events with overlapping TextFields?如何处理具有重叠文本字段的鼠标悬停事件?
【发布时间】:2016-09-22 08:40:21
【问题描述】:

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

每个按钮都是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。如果您运行它,它将在您滚动特定按钮时进行跟踪。如果您尝试将鼠标悬停在最左侧按钮的红色区域上,则它将不起作用。

【问题讨论】:

  • 问题是:为什么您的文本字段重叠?如果您不需要那个空白,只需将其删除,问题就会消失!
  • 很遗憾,我别无选择。我无法详细说明,但文本字段必须是这样的。这是我正在使用的实际库的一个大大简化的示例。

标签: actionscript-3 textfield mouseover


【解决方案1】:

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

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

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

【讨论】:

  • 哦!没错,TabButton 的大小是最大子剪辑的大小,也就是 mcText,对吧?如果 TabButton 没有从 MovieClip 扩展,那么我应该在哪里添加 mcHitZone 和 mcText?他们必须是某物的孩子。
  • 是的。您可以将它们添加到您添加 tabButton 的内容中。
  • 好的,我想我明白了。我会尝试一下。谢谢。
  • 正确的解决方案应该是this.mouseEnabled=false;TabButton 构造函数中,这样TabButton 对鼠标做出反应的唯一部分就是mcHitZone
  • @Vesper 你是对的!出于某种原因,我认为将其设置在 TabButton 会完全禁用所有孩子,但我想这就是为什么有一个单独的 mouseChildren 标志。谢谢你。
猜你喜欢
  • 1970-01-01
  • 2013-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-30
  • 2012-09-11
  • 2018-08-13
  • 1970-01-01
相关资源
最近更新 更多