0

Flash CS4を使用しています。コンパイル後に CS4 が swf をプレビューすると、すべてが正常に機能します。

ただし、Flash アイテムを Web ページに埋め込んだ後、textArea が Flash ピース内でフォーカスを失うと、textarea の組み込み UIscrollbar が一番上にリセットされます。

FOCUS_OUT イベント リスナーを textArea に追加して現在のスクロールバーの値を保存すると、FOCUS_OUT イベントがトリガーされる前でも、スクロールバーの値が最小にリセットされていることがわかります。なんてこと?

これは、textArea の htmlText プロパティが動的に入力されるために発生していると思います。Adobe AIR には HTML を処理する高度な方法がありますが、単純な AS3 はありません。なんて不愉快だ。何ができるでしょうか?

4

1 に答える 1

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;
        }
    }
   );
}
于 2010-10-20T00:08:04.430 に答える