ActionScript 3: Поддержание позиции Textarea Uiscrollbar на потерю фокусировки в встраивании Flash
-
09-10-2019 - |
Вопрос
Я использую Flash CS4. Все функционируют, как это должно, когда CS4 предвещает SWF после его составления.
Тем не менее, после встраивания элемента Flash в веб-страницу, если текстовая пара теряет фокусировку внутри вспышки, встроенная встроенная UIScrollbar текстура.
Вот кикер: если я добавлю слушателя события Focuse_out в текстуарию, чтобы сохранить текущую стоимость прокрутки, я обнаружил, что значение Scrollbar было сброшено до минимума, даже до того, как событие Focke_out срабатывает! WTF?
Я думаю, что это происходит, потому что HTMLText HTMLText Textarea динамически заполняется. Adobe Air предлагает передовые методы для передачи HTML, но не просто AS3, о нет. Как отвратительно. Что может быть сделано?
Решение
Я никогда не думал, что отвечу на свой вопрос, но вот это. Оказывается HTMLText, возможно, была кадром. Jitter Scrollbar проходит между динамически сгенерированным щелчком окна контента и его ухудшением фокусировкой, поэтому это отражает текущую позицию и о том, находится ли прокрутка в нижней части на событии Click и передает эту информацию в событие фокусировки. DisplayWindow - это тот, имеющий динамически сгенерированный контент.
Я относительно новичок до AS3, так что дайте мне знать, если кто-то из этого не кошер.
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;
}
}
);
}