Existe-t-il une solution de contournement au bogue Flash où la sélection ne s’arrête pas?

StackOverflow https://stackoverflow.com/questions/804265

  •  03-07-2019
  •  | 
  •  

Question

Existe-t-il une solution au problème posé avec Adobe Flash dans lequel une animation Flash ne reçoit pas d’événement de souris levée si elle est déplacée en dehors du film?

EDIT: ce problème semble n'affecter que Firefox

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

Le problème, c’est que j’ai un film Flash contenant une zone de texte. Si l’utilisateur clique dessus et traîne pour sélectionner (mettre en surbrillance) du texte, il glisse à l’extérieur du film et relâche la souris. le déplacement FLASH ne reçoit pas l'événement de libération de la souris et même si la souris est levée, le déplacement du curseur sur la page continue de modifier le texte sélectionné dans le flash.

Beaucoup ont suggéré d'utiliser ActinScript pour écouter un événement MOUSE_LEAVE, mais il y a deux problèmes. Premièrement, j'utilise AS2 et non AS3, et deuxièmement, il semble que MOUSE_LEAVE ne se déclenche pas si la souris est maintenue enfoncée lorsqu'elle quitte la scène.

EDIT 2: le "hack" de George Profenza Cela faisait surtout des mois que je travaillais pour moi ... mais depuis le 24/08/10, je vois maintenant que Adobe a marqué ce problème comme résolu, enfin!

Était-ce utile?

La solution

Je peux imaginer le problème, mais je n'arrive pas à me reproduire dans un contexte simple.

Voici un style "sale" ... as2, basé sur le principe de 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);
}

En supposant que l'entrée soit un champ de texte sélectionnable. Si le champ de texte est activé, j'ajoute un écouteur enterFrame pour vérifier si la souris se trouve au-dessus ou à l'extérieur du champ de texte (en utilisant input._xmouse, par opposition à _xmouse, qui est global). Si la souris est en dehors de la zone de texte, je modifie le focus en un objet factice (un bouton appelé dummyBtn). Cela fonctionne si vous êtes dans Firefox et que vous avez une sélection et une publication en dehors du swf, car dès que vous quittez le champ de texte, le focus est déplacé sur le dummyBtn.

J'admets que c'est un peu dur, si vous avez encore besoin de choix ou de quelque chose, alors faites-le moi savoir.

Goodluck.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top