2

如果将鼠标拖到电影之外,Flash 电影没有收到鼠标向上事件的 Adob​​e Flash 问题是否有任何解决方法?

编辑:这个问题似乎只影响 Firefox

请参阅:http ://bugs.adobe.com/jira/browse/FP-234

基本上问题是,我有一个包含文本框的 Flash 电影,如果用户单击文本框并拖动以选择(突出显示)文本,然后他们拖动到 Flash 电影之外并释放鼠标,那么 Flash 移动不会收到鼠标释放事件,即使鼠标已启动,在页面上移动光标也会继续更改 Flash 中的选定文本。

许多人建议使用 ActinScript 来监听 MOUSE_LEAVE 事件,但有两个问题。第一,我使用的是 AS2 而不是 AS3,第二,如果鼠标在离开舞台时按住不放,似乎 MOUSE_LEAVE 不会触发。

编辑 2: George Profenza 的“肮脏黑客”已经为我工作了几个月……但截至 2010 年 8 月 24 日,我现在看到 Adob​​e 终于将此问题标记为已解决!

4

1 回答 1

2

我可以想象问题是什么,但我似乎无法在简单的上下文中重现。

这是一个基于 MOUSE_LEAVE 的“肮脏黑客”...as2 风格。

input.onKillFocus = function(newFocus:Object) {
    trace(this._name+" lost focus. New focus changed to: "+newFocus._name);
    delete input._parent.onEnterFrame;
};
input.onSetFocus = function(oldFocus:Object) {
    trace(this._name+" gained focus. Old focus changed from: "+oldFocus._name);
    input._parent.onEnterFrame = trackMouse;
}

function trackMouse():Void{
    if(input._xmouse < 0 || input._xmouse > (input._x + input._width)) onMouseOut();
    if(input._ymouse < 0 || input._ymouse > (input._y + input._height)) onMouseOut();
}

function onMouseOut():Void{
    Selection.setFocus(dummyBtn);
}

假设输入是一个可选择的文本字段。如果文本字段被聚焦,我添加一个 enterFrame 侦听器来检查鼠标是否在文本字段上方或外部(使用 input._xmouse,而不是全局的 _xmouse)。如果鼠标在文本区域之外,我将焦点更改为一个虚拟对象(一个名为 dummyBtn 的按钮)。如果您在 Firefox 中并且您在 swf 之外有选择和释放,则此方法有效,因为一旦您离开文本字段,焦点就会转移到 dummyBtn。

我承认这有点粗糙,如果您仍然需要选择或其他东西,请告诉我。

祝你好运。

于 2009-04-30T11:44:11.490 回答