2010-10-18 2 views
0

Я использую Flash CS4. Все работает так, как нужно, когда CS4 просматривает swf после его компиляции.ActionScript 3: сохранение textarea Позиция UIscrollbar при потере фокуса во встроенной флэш-памяти

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

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

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

ответ

0

Я никогда не думал, что отвечу на свой вопрос, но вот он. Оказывается, 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; 
     } 
    } 
    ); 
}