ActionScript 3: поддержание позиции текстовой области UIscrollbar при потере фокуса при вставке флэш-памяти - PullRequest
0 голосов
/ 19 октября 2010

Я использую Flash CS4.Все работает так, как должно, когда CS4 предварительно просматривает swf после компиляции.

Однако после встраивания элемента flash в веб-страницу, если textArea теряет фокус внутри фрагмента flash, встроенная UIscrollbar текстовой области сбрасывается наочень верх.

Вот кикер: если я добавлю слушатель события FOCUS_OUT в textArea для сохранения текущего значения полосы прокрутки, я обнаружу, что значение полосы прокрутки было сброшено до минимума даже до того, как событие FOCUS_OUT было запущено!WTF?

Я думаю, что это происходит, потому что свойство textArea htmlText заполняется динамически.Adobe AIR предлагает расширенные методы для работы с HTML, но не простой AS3, о нет.Как неприятно.Что можно сделать?

1 Ответ

0 голосов
/ 20 октября 2010

Я никогда не думал, что отвечу на свой вопрос, но вот он.Оказывается, вещь htmlText могла быть слухом.Дрожание полосы прокрутки происходит между нажатием динамически генерируемого окна контента и его потерянным фокусом, поэтому он фиксирует текущую позицию и наличие полосы прокрутки в нижней части события щелчка и передает эту информацию в событие фокуса.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;
        }
    }
   );
}
...