Flex列表滚动速度与鼠标滚轮

时间:2011-02-25 17:19:53

标签: flex actionscript-3 list scroll mousewheel

我有一个自定义类,它扩展了我用作容器的List。但是,鼠标滚轮上的滚动速度太快,因为即使您仅稍微移动滚轮,它也会滚动加载。我尝试在我的列表中为MouseEvent.MOUSE_WHEEL添加一个事件监听器并设置event.delta的值,但这没有任何效果。有谁知道我怎么能让它变慢?

我的自定义类没有什么特别之处,我只是创建了它,所以我可以为不同的项类型设置不同的itemRenders。它看起来像:

public class MultipleRenderersList extends List
{
    override public function createItemRenderer(data:Object):IListItemRenderer
    {
        if (data is IRenderable)
        {
             return data.getDiaryRenderer();
        }
        else if (data is Array) 
        {
             if (data.length > 0)
             {
                  if (data[0] is IRenderable)
                  {
                       return data[0].getDiaryRenderer(data);
                  }
             }
        }
        return null;
    }
} 

3 个答案:

答案 0 :(得分:4)

List类有一个可以覆盖的mouseWheelHandler函数。只需覆盖该函数,更新mouseevent的delta属性,然后调用super。此示例将对增量进行四分之一,从而大幅降低速度:

package
{
  import flash.events.Event;
  import flash.events.MouseEvent;

  import mx.controls.Alert;
  import mx.controls.List;

  public class MyList extends List
  {

    override protected function mouseWheelHandler(event:MouseEvent):void {
      event.delta = event.delta/4;
      super.mouseWheelHandler(event);
    }

  }
}

但是,在许多情况下,滚动速度/增量将取决于系统首选项,因此这样做可能会导致某些用户出现意外行为。添加处理程序和更新delta失败的原因是,到那时已经调用了mouseWheelHandler。

答案 1 :(得分:2)

修改此方法的一种非常简单的方法是更改​​verticalLineScrollSize属性。这是所有容器的属性,默认为5.(对于flex 3)

答案 2 :(得分:2)

实际上, HandOfCode 所说的内容与此无关。因为他犯了与我相同的错误,这就是认为List组件或TileList组件是容器。他们不是。因此,它们没有verticalLineScrollSize属性。

Sean 解决方案是唯一适合我案例的解决方案。我想补充一点,event.delta可能有正值或负值,具体取决于车轮动作的方向。所以如果你打算滚动,你最好做这样的事情,例如一次一行:

    override protected function mouseWheelHandler(event:MouseEvent):void
    {
        event.delta = (event.delta > 0) ? 1:-1;
        super.mouseWheelHandler(event);
    }
相关问题