ActionScript 3: mantenimiento de área de texto en la posición UIScrollBar pérdida de concentración en Insertar Flash

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

Pregunta

Estoy usando Flash CS4. Todo funciona como debería cuando CS4 vista previa de la swf después de la compilación.

Sin embargo, después de la incorporación del elemento flash en una página web, si la caja de texto pierde el foco dentro de la pieza de flash, del área de texto integrado restablece UIScrollBar a lo más alto.

He aquí el problema: si añado un detector de eventos FOCUS_OUT a la caja de texto para almacenar el valor actual de la barra de desplazamiento, encuentro que el valor de barra de desplazamiento se ha restablecido al mínimo incluso antes de que se active el evento FOCUS_OUT! WTF?

creo que esto está ocurriendo porque el textArea htmlText estructura está poblada de forma dinámica. Adobe AIR tiene métodos avanzados para la entrega de HTML, pero no AS3 sencilla, oh no. Cómo desagradable. ¿Qué se puede hacer?

¿Fue útil?

Solución

Nunca pensé en responder a mi propia pregunta, pero aquí está. Resulta que la cosa htmlText pueden haber sido un bulo. La barra de desplazamiento fluctuación ocurre en el medio se hace clic en la ventana de contenido generado dinámicamente y su enfoque de perder, por lo que esta captura la posición actual y si la barra de desplazamiento de la parte inferior en el evento click y pasa esa información al evento foco. displaywindow es el que tiene el contenido generado dinámicamente.

Yo soy relativamente nuevo en AS3, por lo que me haga saber si algo de esto no es 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;
        }
    }
   );
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top