Actionscript 3 如何处理具有重叠文本字段的鼠标悬停事件?
我有一个表示选项卡的按钮的水平堆栈,每个按钮内部都有一个Actionscript 3 如何处理具有重叠文本字段的鼠标悬停事件?,actionscript-3,textfield,mouseover,Actionscript 3,Textfield,Mouseover,我有一个表示选项卡的按钮的水平堆栈,每个按钮内部都有一个TextField,该字段大于按钮的尺寸,因此它们重叠。如下所示(虚线是一个文本字段,红色框是由于重叠而无法进行鼠标悬停的区域): 这些按钮中的每一个都是TabButton的实例,其类定义如下: package src { import flash.display.MovieClip; import flash.events.Event; import flash.events.MouseEvent; im
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
不会阻止鼠标输入与之重叠的任何内容
我已经上传了FLA,因此我一直在用它进行测试。如果您运行它,它将在您滚动特定按钮时跟踪。如果尝试将鼠标悬停在最左边按钮的红色区域,则该按钮将无法工作。您的按钮有三个movieClips、mcHitZone、mcText和TabButton本身。
因此,当您关闭两个按钮时,上tabButton(不是它的子mcText)将影响下tabButton
我建议你的tabButton不要扩展movieClip,只需使用mcHitZone作为按钮的皮肤,然后将其添加到你的舞台上
正如评论所说,您还可以将tabButton的mouseEnabled设置为false。我混淆了MouseeEnabled和mouseChildren。问题是:为什么文本字段重叠?如果你不需要那个空白,只要把它去掉,问题就会消失!不幸的是,我别无选择。我不能详细说明,但文本字段必须是这样的。这是我正在使用的实际库的一个大大简化的示例!没错,TabButton的大小相当于最大的子剪辑的大小,也就是mcText,对吗?如果TabButton没有从MovieClip扩展,那么我应该在哪里添加mcHitZone和mcText?他们一定是什么东西的孩子。是的。你可以将它们添加到你添加的选项卡按钮中。好的,我想我明白了。我要做一点实验。谢谢。正确的解决方案应该是this.mouseEnabled=false
在TabButton
构造函数中,通过这种方式,TabButton对鼠标的唯一反应部分将是mcHitZone
@Vesper你说得对!出于某种原因,我认为在TabButton
上设置它会对所有的孩子完全禁用它,但我想这就是为什么会有一个单独的mouseChildren
标志的原因。谢谢你。