Как определить, прокручивается ли список или нет? - PullRequest
1 голос
/ 13 июня 2011

Есть ли способ определить, прокручивается ли список или нет, например list.isScrolling

Ответы [ 4 ]

5 голосов
/ 13 июня 2011

Итак, @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>

Ни в одном из этих случаев вы не узнаете, когда список перестает прокручиваться (я не уверен, хотите вы этого или нет). Возможно, вам придется установить таймер, и каждый раз, когда таймер отключается без каких-либо событий прокрутки, вы больше не прокручиваете?

К сожалению, вы не объяснили, чего пытаетесь достичь, но мы не можем адекватно ответить на ваш вопрос.

4 голосов
/ 10 ноября 2012

Или вы можете сделать что-то подобное в списке элементов списка:

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;
    }
}
2 голосов
/ 13 июня 2011

вы можете использовать ScrollEvent.SCROLL:

import mx.events.ScrollEvent

myList.addEventListener(ScrollEvent.SCROLL, scrollHandler);

function scrollHandler(e:ScrollEvent):void
{
//myList is scrolling
}
1 голос
/ 13 июня 2011

Или вы можете сделать это так для искрового компонента!

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>
...