Accelerating Scrollable Flex Control

The general concept of creating this control is using a Timer to control, scroll through your control before slowing down after it is being triggered by Mouse_Wheel.
So you need to listen to two events.




package com.controls.controls
{
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.TimerEvent;
import flash.utils.Timer;

import mx.controls.List;

public class CtlList extends List
{

public var sliderSpeed:Number=5;
public var sliderSlowSpeed:Number=1;
private var sliderAlreadyScrolling:Boolean=false;
private var QtyBeforeSlowDown:Number=5;
private var slideTimeCounter:Number=20;
private var currentSlideCounter:Number=slideTimeCounter;

private var DownDirection:Boolean=true;


public function CtlList()
{
this.addEventListener(MouseEvent.MOUSE_WHEEL, MouseWheel_Scrolling);
super();
}

private function MouseWheel_Scrolling(evt:MouseEvent):void
{

if (!sliderAlreadyScrolling)
{
/// do scrolling ///
DoScrolling(evt.delta);

}
else
{
///// Reset the Scrolling Behaviour ///
currentSlideCounter=slideTimeCounter;
}

}

private function DoScrolling(delta:Number):void
{
sliderAlreadyScrolling=true;
var ScrollTimer:Timer = new Timer(50, slideTimeCounter);

if (delta > 0)
{
DownDirection=false;
}
else
{
DownDirection=true;
}


ScrollTimer.addEventListener(TimerEvent.TIMER, ContinueScrolling);
ScrollTimer.addEventListener(TimerEvent.TIMER_COMPLETE, SlowDownScrolling);
ScrollTimer.start();
}

private function ContinueScrolling(evt:TimerEvent):void
{
var currentPosition:Number = this.verticalScrollBar.scrollPosition;
var maxPosition:Number = this.verticalScrollBar.maxScrollPosition;
var minPosition:Number = this.verticalScrollBar.minScrollPosition;
currentSlideCounter--;


if (DownDirection)
{
if ( currentPosition >= minPosition)
{
if (currentSlideCounter <= QtyBeforeSlowDown)
{
this.verticalScrollBar.scrollPosition = (currentPosition + sliderSlowSpeed);
super.scrollToIndex(this.verticalScrollBar.scrollPosition);
}
else
{
this.verticalScrollBar.scrollPosition = (currentPosition + sliderSpeed);
super.scrollToIndex(this.verticalScrollBar.scrollPosition);
}
}
}
else
{
if ( currentPosition <= maxPosition)
{
if (currentSlideCounter <= QtyBeforeSlowDown)
{
this.verticalScrollBar.scrollPosition = (currentPosition - sliderSlowSpeed);
super.scrollToIndex(this.verticalScrollBar.scrollPosition);
}
else
{
this.verticalScrollBar.scrollPosition = (currentPosition - sliderSpeed);
super.scrollToIndex(this.verticalScrollBar.scrollPosition);
}
}

}

}

private function SlowDownScrolling(evt:Event):void
{
this.verticalScrollBar.scrollPosition=0;
sliderAlreadyScrolling=false;
}

private function SetWheelInterval():void {


}


}
}

Comments

Popular posts from this blog

OpenCover code coverage for .Net Core

Using Custom DLL with IronPython / Scripts

ionic2 cordova build android - Unable resolve gradle 2.2.3