ActionScript 3: le maintien de la position textarea UIScrollBar sur la perte de concentration dans embed Flash

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

Question

J'utilise Flash CS4. Tout fonctionne comme il se doit quand CS4 prévisualise le swf après le compiler.

Cependant, après intégration du produit flash dans une page Web, si le textArea perd le focus dans le morceau flash, intégré remet à zéro UIScrollBar de la zone de texte au sommet.

Voici le kicker: si j'ajoute un écouteur d'événement FOCUS_OUT au textArea pour stocker la valeur actuelle scrollbar, je trouve que la valeur de la barre de défilement a été remis à minimum avant même l'événement FOCUS_OUT est déclenché! WTF?

Je pense que cela se produit parce que le htmlText de textArea propery est dynamiquement peuplé. Adobe AIR a des méthodes avancées pour la remise HTML, mais pas AS3 simples, oh non. Comment désagréable. Que peut-on faire?

Était-ce utile?

La solution

Je ne pensais pas que je vais répondre à ma propre question, mais elle est ici. Il se trouve que la chose htmlText ont peut-être été un bobard. La gigue de la barre de défilement qui se passe entre le foyer de sa perdante clique dessus et de la fenêtre de contenu généré dynamiquement, de sorte que cette capture la position actuelle et si les années scrollbar au bas de l'événement click et transmet cette information à l'événement de mise au point. displayWindow est celui qui a un contenu généré dynamiquement.

Je suis relativement nouveau à AS3, alors laissez-moi savoir si tout cela n'est pas casher.

displayWindow.addEventListener(MouseEvent.ROLL_OUT, handleClick);
function handleClick(event:MouseEvent):void
{
    //here, user has clicked output window
    var currentPosition = displayWindow.verticalScrollPosition;
    var atTheBottom:Boolean = (currentPosition == displayWindow.maxVerticalScrollPosition);
   var focusAdded:Boolean = false;
   displayWindow.addEventListener(FocusEvent.FOCUS_OUT, 
   function handy() {
        //here, user has clicked away from output window  

       if (!focusAdded) {
            if (atTheBottom)
                displayWindow.verticalScrollPosition = displayWindow.maxVerticalScrollPosition;
            else
                displayWindow.verticalScrollPosition = currentPosition;

            focusAdded = true;

        } else {
            displayWindow.removeEventListener(FocusEvent.FOCUS_OUT, handy);
            focusAdded = false;
        }
    }
   );
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top