有没有办法在Flash中的静态文本字段中捕获MOUSE_UP事件?

时间:2010-05-07 23:02:58

标签: flash actionscript-3 static mouseevent textfield

当用户按下鼠标并在具有可选文本的静态文本字段上释放鼠标时,不会触发任何MOUSE_UP事件 - 不在舞台上,也不在其他地方。

我在使用嵌套静态文本字段的movieclip上使用滚动条类时遇到过这种情况。 当用户拖动滚动手柄并将鼠标放在文本字段上时,拖动/滚动就会卡住。

要测试这个,请创建一个新的AS3 fla文件,在某处放置一个静态文本字段,然后输入一些文本。确保在属性面板中选中了可选属性。 将此脚本添加到时间轴:

import flash.events.* 
function down(event:Event):void { trace('down'); }
function up(event:Event):void { trace('up'); }
stage.addEventListener(MouseEvent.MOUSE_DOWN, down)
stage.addEventListener(MouseEvent.MOUSE_UP, up)

现在测试电影并单击鼠标。您将注意到在文本字段上释放鼠标时不会发生跟踪('向上')。

2 个答案:

答案 0 :(得分:0)

简短的回答是否定的,尽管您可以尝试遍历舞台的显示列表并向其添加鼠标事件。

将鼠标事件分配给动态文本字段,并使用您可以引用的实例名称。

import flash.events.MouseEvent;

// tf:TextField instance created with authoring tool
tf.text = "Hello World!";

tf.addEventListener(MouseEvent.MOUSE_UP, handleMouseUp);

stage.addEventListener(MouseEvent.MOUSE_UP, handleMouseUp);
stage.addEventListener(MouseEvent.MOUSE_DOWN, handleMouseDown);

function handleMouseUp(event:Event):void { trace('up'); }
function handleMouseDown(event:Event):void { trace('down'); }

在没有添加事件侦听器的文本字段上释放鼠标时,没有从舞台调度任何事件是正确的行为。毕竟,您的文本字段位于舞台上方。

希望这有帮助。

答案 1 :(得分:0)

有一种方法,但你必须稍微捏一下。

1.在文本字段上添加一个Sprite,现在收到MOUSE_UP事件,但文本不再可选。

2.使用指向“hitTestTextNearPos”和“setSelected”的TextSnapshot类,在覆盖的精灵上收到MOUSE_DOWN / MOUSE_MOVE事件时选择静态文本字段内的文本。

您现在有一个可选的静态文本字段,可以在其上面触发MOUSE_UP。 可能需要自定义指针(选择)来完美地模拟行为。