【问题标题】:Detect scrollbar appear/dissapear in the Grid检测网格中出现/消失的滚动条
【发布时间】:2013-11-20 02:24:34
【问题描述】:

我有一个 Grid 组件,它的 verticalScrollPolicy 设置为“auto”。 而且每次verticalScrollBar出现或消失时,我都想处理这个事件。

我尝试监听 RESIZE 事件:

    private function onGridResize(event:Event):void
    {
       if (_grid.verticalScrollBar && _grid.verticalScrollBar.visible)
       {
           trace("scroll on");
       }
       else
       {
           trace("scroll off");
       }
    }

但它不起作用:在我看来,RESIZE 事件实际上是在网格视觉更新和滚动条出现/消失之前调度的。 我也尝试监听 ChildExistenceChangedEvent.CHILD_ADD 和 ChildExistenceChangedEvent.CHILD_REMOVE 事件,但对我也不起作用。

也许我只是没有看到一些明显的解决方案。 提前感谢您的任何帮助或建议。

【问题讨论】:

    标签: actionscript-3 apache-flex actionscript flex3


    【解决方案1】:

    您没有指定哪个网格。 (Spark、MX 或我们的其中一个 (http://www.flexicious.com/Home/Ultimate))

    您可以做的一件事是在检查之前抛出一个 validateNow:

    private function onGridResize(event:Event):void
        {
           _grid.validateNow(); //add this.
    
           if (_grid.verticalScrollBar && _grid.verticalScrollBar.visible)
           {
               trace("scroll on");
           }
           else
           {
               trace("scroll off");
           }
        }
    

    您还可以做的另一件事是使用计时器或稍后调用。

    private function onGridResize(event:Event):void
        {
           callLater(checkForScrollBar); //check for scrollbar would have the code above.
        }
    

    【讨论】:

    • 非常感谢您的帮助! “_grid.validateNow();”完全适合我!现在一切都按我的意愿进行。多谢一次! p.s.我在这个例子中使用了 MX 组件。
    【解决方案2】:

    也许您可以监听ScrollBar 本身的“show”事件。类似这样的东西应该可以工作:

    _grid.verticalScrollBar.addEventListener(ComponentEvent.SHOW, onGridResize);
    

    我没有对此进行测试,但我很确定它应该可以工作。 (当然,您可能希望将 onGridResize 重命名为更合适的名称,例如 onVerticalScrollShow。)

    顺便说一句,您不必检查ScrollBar 是否存在;至少在纯 AS3 中,它们与 DataGrid 一起被实例化,并且无论它们的 ScrollPolicy 值如何都存在。

    resize 事件似乎会立即触发的原因是因为它会在其尺寸发生变化时立即调度。我假设在您的应用程序中,用户拖动以手动调整网格的大小,因此一旦进行任何调整,事件就会触发。

    【讨论】:

    • 感谢您的快速响应!我现在已经尝试过了,但是当我尝试启动应用程序时,我收到错误:“错误 #1009:无法访问空对象引用的属性或方法”:_grid.verticalScrollBar.addEventListener(ComponentEvent.SHOW , onGridResize);这是因为当 ScrollBar 不显示时,它实际上是不存在的。我在基本组件 Container.as 中找到了适当的代码块:滚动条每次出现时都会创建,每次隐藏时都会被销毁。
    • 啊,这真是太糟糕了。我很确定它始终存在,尽管 Flex 组件的工作方式可能与 Flash 组件不同。在这种情况下,不幸的是,除了每帧检查ScrollBar 的存在之外,我想不到其他任何事情了。
    • 现在我的问题解决了。无论如何,非常感谢您的帮助和建议。
    猜你喜欢
    • 2011-02-04
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-25
    相关资源
    最近更新 更多