List 使用鼠标单击滚动后使用鼠标滚轮时,使用Tilelayout超大尺寸在Spark列表中滚动间隔

List 使用鼠标单击滚动后使用鼠标滚轮时,使用Tilelayout超大尺寸在Spark列表中滚动间隔,list,actionscript-3,apache-flex,scroll,flex-spark,List,Actionscript 3,Apache Flex,Scroll,Flex Spark,我有一个带有项目渲染器和平铺布局的spark列表。 如果我在滚动条上单击鼠标并尝试在之后使用鼠标滚轮滚动,则会出现问题: 滚动间隔过大,列表不会向下(或向上)滚动一个项目,而是向下(或向上)滚动4个项目 rowHeight=180和columnWidth=220是渲染器的尺寸 有什么问题或我如何解决这个问题的提示吗 更新: 这是一个小例子: 主要应用程序: <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns

我有一个带有项目渲染器和平铺布局的spark列表。
如果我在滚动条上单击鼠标并尝试在之后使用鼠标滚轮滚动,则会出现问题:

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


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(将windows中的line scroll属性设置为3,这样就可以了)。
但如果现在单击滚动条并再次滚动(从顶部),您将看到项目12和13位于顶部。与之前不同的是第6项和第7项…

您可以通过子类化VScrollBar并重写mouseweelHandler方法来控制鼠标滚轮的滚动量。此论坛帖子中附有示例代码:

这在多个操作系统/浏览器中是否一致?你能提供一个完整的可运行的示例和数据来演示这个问题吗?我已经提供了一个示例(参见问题)。这个问题并不存在于IE中,而是存在于Firefox中。我不可能在Windows XP以外的其他操作系统上测试它。我无法在FF中复制它,但滚动的位置是VScrollBar->mouseweelhandler,因此您可能需要在那里进行检查。
<?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>