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