【发布时间】: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