检测滚动条在网格中出现/消失

时间:2013-11-08 06:29:51

标签: actionscript-3 flex actionscript flex3

我有一个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事件,但它对我也不起作用。

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

2 个答案:

答案 0 :(得分:2)

您没有指定哪个网格。 (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.
    }

答案 1 :(得分:0)

也许你可以听一下ScrollBar本身的“show”事件。有些事情应该有效:

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

我没有测试过这个,但我很确定它应该可行。 (当然,您可能希望将onGridResize重命名为更适合onVerticalScrollShow的内容。)

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

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