ActionScript 3: mantenere textarea posizione UIScrollBar sulla perdita di messa a fuoco in Flash embed

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

Domanda

Sto usando Flash CS4. tutto funziona come dovrebbe, quando CS4 in anteprima il file SWF dopo la compilazione.

Tuttavia, dopo l'incorporazione l'oggetto Flash in una pagina web, se il textArea perde lo stato attivo all'interno del pezzo flash, del textarea built-in reset UIScrollBar fino alla cima.

Ecco il kicker: se aggiungo un listener di eventi FOCUS_OUT al textArea per memorizzare il valore corrente della barra di scorrimento, trovo che il valore barra di scorrimento è stato ripristinato al minimo, anche prima che l'evento FOCUS_OUT viene attivato! WTF?

Credo che questo si sta verificando a causa del textArea htmlText propery è dinamicamente popolato. Adobe AIR ha metodi avanzati per la consegna HTML, ma non è semplice AS3, oh no. Come antipatico. Cosa si può fare?

È stato utile?

Soluzione

Non ho mai pensato che avrei rispondere alla mia domanda, ma qui è. Si scopre che la cosa htmlText potrebbe essere stato un canard. Il jitter barra di scorrimento avviene in tra l'essere cliccato della finestra del contenuto generato dinamicamente e la sua attenzione perdente, quindi questo cattura la posizione attuale e se la barra di scorrimento del in basso a l'evento click e passa queste informazioni alla manifestazione messa a fuoco. displayWindow è quello con contenuto generato dinamicamente.

Sono relativamente nuovo per AS3, quindi fatemi sapere se tutto questo non è kosher.

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;
        }
    }
   );
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top