我有一个代表标签的水平堆栈按钮,每个按钮内部都有一个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。如果您运行它,它将在您翻转特定按钮时跟踪。如果你试图将鼠标悬停在最左边按钮的红色区域上,那么它将无法正常工作。
答案 0 :(得分:1)
您的按钮有三个movieClip,mcHitZone,mcText和TabButton本身。 所以当你关闭两个按钮时,up tabButton(不是它的Child mcText)会影响下tabButton。
我建议你的tabButton不要扩展movieClip,只需使用mcHitZone作为Button的皮肤,然后将它添加到你的舞台上。
正如评论所说,你也可以将tabButton的mouseEnabled设为false。我混合了mouseEnabled和mouseChildren。