ActionScript 3: mantenimiento de área de texto en la posición UIScrollBar pérdida de concentración en Insertar Flash
-
09-10-2019 - |
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?
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;
}
}
);
}