【问题标题】:ActionScript 3: maintaining textarea UIscrollbar position on loss of focus in flash embedActionScript 3:在 Flash embed 中失去焦点时保持 textarea UIscrollbar 位置
【发布时间】:2011-04-27 05:31:17
【问题描述】:

我正在使用 Flash CS4。当 CS4 在编译后预览 swf 时,一切都正常运行。

但是,在将 flash 项嵌入网页后,如果 textArea 在 flash 片段中失去焦点,则 textarea 的内置 UIscrollbar 会重置到最顶部。

这里是关键:如果我向 textArea 添加一个 FOCUS_OUT 事件侦听器来存储当前滚动条值,我发现滚动条值甚至在触发 FOCUS_OUT 事件之前就已重置为最小值!怎么回事?

我认为这是因为 textArea 的 htmlText 属性是动态填充的。 Adobe AIR 有处理 HTML 的高级方法,但不是简单的 AS3,哦不。多么令人讨厌。可以做什么?

【问题讨论】:

    标签: actionscript-3 flash-cs4 htmltext


    【解决方案1】:

    我从没想过我会回答我自己的问题,但就是这样。原来 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;
            }
        }
       );
    }
    

    【讨论】:

      猜你喜欢
      • 2011-07-16
      • 1970-01-01
      • 2020-06-06
      • 2013-02-23
      • 2018-11-23
      • 2011-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多