使用Tilelayout在Spark列表中滚动的间隔使用鼠标滚轮滚动后使用鼠标滚轮过大时

问题描述:

我有一个带有项目渲染器和tile布局的spark列表。
如果我用滚动条上单击鼠标,并试图与后鼠标滚轮滚动滚动,有一个问题:使用Tilelayout在Spark列表中滚动的间隔使用鼠标滚轮滚动后使用鼠标滚轮过大时

滚动的间隔过大,而不是滚动一个项目下来(或向上)列表向下(或向上)滚动4个项目。

<s:List 
    dataProvider="{myDataProvider}" 
    itemRenderer="MyRenderer" 
    left="11" right="11" 
    bottom="3" top="10" 
    useVirtualLayout="false" 
    > 
     <s:layout> 
      <s:TileLayout 
       columnAlign="justifyUsingWidth" 
       rowAlign="justifyUsingGap" 
       orientation="rows" 
       rowHeight="180" 
       columnWidth="220" 
       clipAndEnableScrolling="true" 
       /> 
     </s:layout> 
    </s:List> 

rowHeight = 180和columnWidth = 220是我的渲染器的尺寸。

任何提示有什么不对或我该如何解决这个问题?

更新: 这是一个小例子:

主要应用:

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" 
       creationComplete="init(event)"> 
    <fx:Script> 
     <![CDATA[ 
      import mx.collections.ArrayCollection; 
      import mx.events.FlexEvent; 

      [Bindable] public var items:ArrayCollection; 

      protected function init(event:FlexEvent):void{ 
       items = new ArrayCollection(); 
       for(var i:int = 0; i<200; i++){ 
        var obj:Object = new Object(); 
        obj.name = "Item "+i; 
        items.addItem(obj); 
       } 
      } 

        protected function list1_mouseWheelHandler(event:MouseEvent):void{ 
       trace("delta ="+event.delta); 
      } 
     ]]> 
    </fx:Script> 
    <s:Group width="50%" 
      height="50%"> 
     <s:List 
      dataProvider="{items}" 
      left="5" right="5" 
      top="5" bottom="5" 
      itemRenderer="MyRenderer" 
      allowMultipleSelection="false" 
      useVirtualLayout="false" 
      mouseWheel="list1_mouseWheelHandler(event)" 
      > 
      <s:layout> 
       <s:TileLayout 
        columnAlign="justifyUsingWidth" 
        rowAlign="justifyUsingGap" 
        orientation="rows" 
        rowHeight="180" 
        columnWidth="220" 
        clipAndEnableScrolling="true" 
        /> 
      </s:layout> 
     </s:List> 
    </s:Group> 

而且渲染:

<?xml version="1.0" encoding="utf-8"?> 
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" 
       xmlns:spareparts="de.rotex.spareparts.*" 
       width="220" height="180"> 

    <s:BorderContainer borderColor="#FFF9DE" >  
     <s:Label horizontalCenter="0" verticalCenter="0" 
       text="{data.name}" /> 
    </s:BorderContainer> 
</s:ItemRenderer> 

如果您现在尝试滚动你会注意到(使用一个滚动条),你会看到条目6和条目7在顶部(将窗口中的行滚动属性设置为3,这是正常的)。 但是,如果您现在单击滚动条并再次滚动(从顶部),您会看到项目12和13位于顶部。没有项目6和前7 ...

+0

跨多个操作系统/浏览器这是否一致?你能否提供一个完整的可运行示例来展示问题的数据? – JeffryHouser 2010-08-27 13:03:53

+0

我提供了一个示例(请参阅问题)。 该问题不会在IE浏览器,但在Firefox存在。我没有测试它在另一个操作系统比Windows XP的可能性。 – hering 2010-08-31 06:38:59

+0

我不能在FF重现此,而是在滚动的点位是VScrollBar-> mouseWheelHandler,所以你可能需要检查那里。 – 2011-03-07 15:45:22

您可以控制通过继承VScrollBar并重写mouseWheelHandler方法,通过鼠标滚轮滚动金额。在这个论坛线程A后已连接的示例代码:http://forums.adobe.com/message/2783736