2011-02-25 4 views
2

저는 컨테이너로 사용하고있는 List를 확장하는 커스텀 클래스를 가지고 있습니다. 그러나 마우스 휠에서 스크롤 속도가 너무 빠릅니다. 휠을 조금만 움직여도 스크롤 속도가 빨라집니다. MouseList.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; 
    } 
} 

답변

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

    } 
} 

그러나, 많은 경우에 스크롤 속도/델타 시스템 환경 설정의 해제 구동되므로, 이렇게하면 일부 사용자에게 예기치 않은 동작이 발생할 수 있습니다. 핸들러를 추가하고 델타를 업데이트하는 것이 실패한 이유는 그 시점에서 mouseWheelHandler가 이미 호출 되었기 때문입니다.

+0

델타 값은 OS 및 브라우저 조합에 따라 다르므로 자바 스크립트 관점에서 값을 확인하는 것이 좋습니다. (나는 플렉스 이벤트에서 미러링 될 것입니다) http://www.switchonthecode.com/tutorials/javascript-tutorial-the-scroll-wheel 만약 당신이 미세 곡물 컨트롤을 가지고 싶다면 당신은 약간의 일을해야 할 것입니다. 정상화. – shaunhusain

+0

정말 고마워요! 이것은 내가 필요로하고 훌륭하게 나를 위해 일한 것입니다. 델타가 1보다 작아지는 것처럼 3으로 나누고 4로 나누지 않아도되지만 0으로 설정되어 전혀 스크롤되지 않습니다. 다시 고마워요 :) –

+1

당신을 환영합니다! 값을 0으로 설정하지 않으려면 항상 "event.delta = Math.max (1, event.delta/4)"와 같은 작업을 수행 할 수 있습니다. 3으로 나누더라도 일부 상황에서는 여전히 0으로 끝날 수 있습니다. – sean

2

이것을 수정하는 가장 간단한 방법은 verticalLineScrollSize 속성을 변경하는 것입니다. 이 속성은 모든 컨테이너의 속성이며 기본값은 5입니다. (flex 3의 경우)

+0

세로선 스크롤이 없습니다. – Jeffin

2

실제로 HandOfCode은 여기에 관련이 없습니다. 왜냐하면 그는 List 구성 요소 또는 TileList 구성 요소가 컨테이너라고 생각하는 것과 동일한 실수를 저질렀 기 때문입니다. 그들은 그렇지 않습니다. 따라서 verticalLineScrollSize 속성이 없습니다.

Sean 해결책은 내 경우에 효과가있는 유일한 솔루션입니다. 그 event.delta는 휠 동작의 방향에 따라 양수 또는 음수 값을 가질 수 있습니다. 따라서 한 번에 한 줄씩 스크롤 할 계획이라면 이렇게하는 것이 좋습니다.

관련 문제