Есть ли обходной путь к ошибке Flash, когда выбор не останавливается? - PullRequest
2 голосов
/ 30 апреля 2009

Есть ли обходной путь к проблеме с Adobe Flash, когда Flash Movie не получает событие повышения мыши, если мышь перетаскивают за пределы фильма?

РЕДАКТИРОВАТЬ: Эта проблема, похоже, касается только Firefox

См .: http://bugs.adobe.com/jira/browse/FP-234

По сути, проблема в том, что у меня есть флэш-фильм, который содержит текстовое поле, и если пользователь щелкает текстовое поле и перетаскивает его, чтобы выделить (выделить) текст, а затем перетащить за пределы флэш-фильма и отпустить мышь, перемещение FLASH не получает события отпускания мыши, и даже если мышь находится вверх, перемещение курсора по странице продолжает изменять выделенный текст во флэш-памяти.

Многие предлагали использовать ActinScript для прослушивания события MOUSE_LEAVE, но есть две проблемы. Во-первых, я использую AS2, а не AS3, а во-вторых, кажется, что MOUSE_LEAVE не срабатывает, если удерживать мышь нажатой, когда она покидает сцену.

РЕДАКТИРОВАТЬ 2:"Грязный взлом" Джорджа Профенцы в основном работал на меня в течение нескольких месяцев ... но с 24.08.10 я вижу, что Adobe пометила эту проблему как решенную, наконец!

1 Ответ

2 голосов
/ 30 апреля 2009

Я могу представить, в чем проблема, но я не могу воспроизвести в простом контексте.

Вот «грязный хак» ... стиль as2, основанный на MOUSE_LEAVE.

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.

Я признаю, что это немного грубо, если вам все еще нужен выбор или что-то еще, так что дайте мне знать.

Гудлак.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...