Actionscript 3 检测网格中滚动条的出现/消失
我有一个网格组件,它的垂直滚动策略设置为“自动”。 每当verticalScrollBar出现或消失时,我都想处理这个事件 我尝试收听调整大小事件:Actionscript 3 检测网格中滚动条的出现/消失,actionscript-3,apache-flex,actionscript,flex3,Actionscript 3,Apache Flex,Actionscript,Flex3,我有一个网格组件,它的垂直滚动策略设置为“自动”。 每当verticalScrollBar出现或消失时,我都想处理这个事件 我尝试收听调整大小事件: private function onGridResize(event:Event):void { if (_grid.verticalScrollBar && _grid.verticalScrollBar.visible) { trace("scroll on")
private function onGridResize(event:Event):void
{
if (_grid.verticalScrollBar && _grid.verticalScrollBar.visible)
{
trace("scroll on");
}
else
{
trace("scroll off");
}
}
但它不起作用:在我看来,调整大小事件实际上是在网格可视化更新和滚动条出现/消失之前发出的。
我尝试了监听ChildExistenceChangedEvent.CHILD\u添加和ChildExistenceChangedEvent.CHILD\u删除事件,但对我来说也不起作用
也许我只是看不到什么明显的解决办法。
提前感谢您的帮助或建议。也许您可以收听
滚动条本身的“显示”事件。这样做应该会奏效:
_grid.verticalScrollBar.addEventListener(ComponentEvent.SHOW, onGridResize);
我还没有测试过这个,但我很确定它应该能工作。(当然,您可能希望将onGridResize
重命名为更合适的名称,如onVerticalScrollShow
)
顺便说一下,您不必检查滚动条是否存在;至少在纯AS3中,它们与DataGrid
一起被实例化,并且不考虑它们的ScrollPolicy
值而存在
resize事件显示为立即触发的原因是,一旦其维度发生更改,它就会被调度。我假设在您的应用程序中,用户拖动以手动调整网格的大小,因此一旦进行任何调整,事件就会触发。您不指定哪个网格。(Spark、MX或我们的其中一个())
您可以做的一件事是在检查之前抛出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.
}
感谢您的快速回复!我现在已经尝试过了,但当我尝试启动应用程序时,我得到了以下错误:“error#1009:无法访问空对象引用的属性或方法:_grid.verticalScrollBar.addEventListener(ComponentEvent.SHOW,onGridResize);这是因为当滚动条未显示时,它实际上并不存在。我在基本组件容器中找到了合适的代码块。正如:滚动条每次出现时都会被创建,每次隐藏时都会被销毁。啊,这太糟糕了。我很确定它总是存在的,尽管Flex组件的工作方式可能与Flash组件不同。在这种情况下,不幸的是,除了每一帧检查滚动条的存在之外,我想不出其他什么了。现在我的问题解决了。无论如何,非常感谢你的帮助和建议。非常感谢你的帮助!“_grid.validateNow();”完全适合我!现在一切都按我的要求进行了。再次感谢你!p、 在这个例子中,我使用的是MX组件。