如何解决如何检测列表是否在滚动?
| 有没有办法检测列表是否在滚动,例如list.isScrolling
解决方法
因此,@ Khaled展示了一种使用MX组件进行操作的方法。如果您使用的是Spark组件,则该事件将不起作用。相反,您可以聆听
myList.scroller.viewport.verticalScrollPosition
或horizontalScrollPosition
的变化。
<fx:Declarations>
<fx:int id=\"scrollingCount\" />
</fx:Declarations>
<s:initialize>
BindingUtils.bindSetter(function(x:*):void { scrollingCount++; },myList.scroller.viewport,\"verticalScrollPosition\");
</s:initialize>
<s:VGroup>
<s:Label text=\"Scrolling: {scrollingCount}\" />
<s:List id=\"myList\" height=\"200\" dataProvider=\"{myData}\" />
</s:VGroup>
在这两种情况下,您都不知道列表何时停止滚动(我不确定是否要滚动)。您可能需要设置一个计时器,并且只要计时器关闭而没有任何滚动事件,您就不再滚动了吗?
不幸的是,您还没有解释您要完成的工作,因此我们无法充分回答您的问题。
, 或者,您可以在列表itemrenderer中执行以下操作:
import spark.components.List;
[Bindable]
private var calcWidth:Number=195;
private var listVerticalScroll:Boolean;
private var listHorizontalScroll:Boolean;
override protected function updateDisplayList(unscaledWidth:Number,unscaledHeight:Number):void{
var ownerVerticalScroll:Boolean=List(owner).scroller.verticalScrollBar.visible;
var ownerHorizontalScroll:Boolean=List(owner).scroller.horizontalScrollBar.visible;
if(ownerVerticalScroll!=listVerticalScroll){
listVerticalScroll=ownerVerticalScroll;
scrollBarChange()
}
super.updateDisplayList(unscaledWidth,unscaledHeight);
}
private function scrollBarChange():void {
if(listVerticalScroll){
var newWidth:Number=195-(listVerticalScroll?15:0);
calcWidth=newWidth;
}
}
, 您可以使用ScrollEvent.SCROLL:
import mx.events.ScrollEvent
myList.addEventListener(ScrollEvent.SCROLL,scrollHandler);
function scrollHandler(e:ScrollEvent):void
{
//myList is scrolling
}
, 或者,您可以像这样对spark组件执行此操作!
http://blog.flexexamples.com/2009/05/31/detecting-when-the-vertical-scroll-bar-is-scrolled-on-a-spark-list-control-in-flex-4/- >
<fx:Script>
<![CDATA[
import spark.components.VScrollBar;
private function init():void {
list.scroller.verticalScrollBar.addEventListener(Event.CHANGE,list_verticalScrollBar_change);
}
private function list_verticalScrollBar_change(evt:Event):void {
var vsb:VScrollBar = evt.currentTarget as VScrollBar;
var obj:Object = {};
obj.type = evt.type;
obj.val = vsb.value;
obj.max = vsb.maximum;
arrColl.addItem(obj);
callLater(dgScroll);
}
private function dgScroll():void {
dataGrid.verticalScrollPosition = dataGrid.maxVerticalScrollPosition;
}
]]>
</fx:Script>
<fx:Declarations>
<mx:ArrayCollection id=\"arrColl\" />
</fx:Declarations>
<s:HGroup horizontalCenter=\"0\" verticalCenter=\"0\">
<s:List id=\"list\"
creationComplete=\"init();\">
<s:layout>
<s:VerticalLayout gap=\"0\"
horizontalAlign=\"contentJustify\"
requestedRowCount=\"4\" />
</s:layout>
<s:dataProvider>
<s:ArrayList>
<fx:String>The</fx:String>
<fx:String>Quick</fx:String>
<fx:String>Brown</fx:String>
<fx:String>Fox</fx:String>
<fx:String>Jumps</fx:String>
<fx:String>Over</fx:String>
<fx:String>The</fx:String>
<fx:String>Lazy</fx:String>
<fx:String>Dog</fx:String>
</s:ArrayList>
</s:dataProvider>
</s:List>
<mx:DataGrid id=\"dataGrid\"
dataProvider=\"{arrColl}\"
width=\"200\"
verticalScrollPolicy=\"on\">
<mx:columns>
<mx:DataGridColumn dataField=\"type\" />
<mx:DataGridColumn dataField=\"val\" />
<mx:DataGridColumn dataField=\"max\" />
</mx:columns>
</mx:DataGrid>
</s:HGroup>
</s:Application>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。