【问题标题】:Flex List Scroll Speed With Mouse Wheel使用鼠标滚轮的 Flex 列表滚动速度
【发布时间】:2012-12-20 23:50:45
【问题描述】:

我有一个自定义类,它扩展了我用作容器的 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;
    }
} 

【问题讨论】:

    标签: apache-flex actionscript-3 list scroll mousewheel


    【解决方案1】:

    List 类有一个可以覆盖的 mouseWheelHandler 函数。只需重写该函数,更新 mouseevent 的 delta 属性,然后调用 super。这个例子将 delta 减半,大大降低了速度:

    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);
        }
    
      }
    }
    

    但是,在许多情况下,滚动速度/增量将脱离系统偏好设置,因此这样做可能会导致某些用户出现意外行为。添加处理程序和更新增量失败的原因是此时 mouseWheelHandler 已经被调用。

    【讨论】:

    • 还要注意 delta 值因操作系统和浏览器组合而异,以便从 javascript 角度查看值(我相信这将反映在 flex 事件中)switchonthecode.com/tutorials/… 如果你想有细粒度控制看起来你必须做一些规范化。
    • 非常感谢!这正是我所需要的,并且为我出色地工作。虽然我不得不将它除以 3 而不是 4,就好像 delta 最终小于 1 一样,它设置为 0 并且根本不滚动。再次感谢你:)
    • 不客气!您总是可以执行“event.delta = Math.max(1, event.delta/4)”之类的操作,以避免将值设置为零。即使除以 3,在某些情况下仍可能会得到零。
    【解决方案2】:

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

    【讨论】:

    • 没有verticallinescrollsize
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-31
      • 1970-01-01
      • 1970-01-01
      • 2011-09-29
      • 1970-01-01
      相关资源
      最近更新 更多