package {
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Rectangle;
public class Scrubbar extends MovieClip {
private static const PAUSE_STATE:int = 1;
private static const PLAY_STATE:int = 2;
private var _mcPlay:MovieClip;
private var _mcScroller:MovieClip;
private var _mcScrollArea:MovieClip;
private var _rScrollTrack:Rectangle; // the scroller track (limits the movement)
private var _mySwf:SwfLoader;
public function Scrubbar() {
init();
initListeners();
}
/* GETTERS ***********************************************************/
public function getScrollLocation():Number { // returns a value 0~1
return _mcScroller.x / (_mcScrollArea.width-_mcScroller.width);
}
/* SETTERS ***********************************************************/
public function setScrollerLocation(nLocation:Number):void { // nLocation is a value 0~1
_mcScroller.x = nLocation * (_mcScrollArea.width – _mcScroller.width);
}
/* INIT **************************************************************/
private function init():void {
_mcPlay = getChildByName(“mcPlay”) as MovieClip;
_mcScroller = getChildByName(“mcScroller”) as MovieClip;
_mcScrollArea = getChildByName(“mcScrollArea”) as MovieClip;
_rScrollTrack = new Rectangle(0, 0, _mcScrollArea.width-_mcScroller.width, 0); // scroll track
_mcPlay.buttonMode = true;
_mcScroller.buttonMode = true;
_mcPlay.gotoAndStop(PAUSE_STATE);
}
private function initListeners():void {
_mcPlay.addEventListener(MouseEvent.CLICK, onPlay);
_mcScroller.addEventListener(MouseEvent.MOUSE_DOWN, onScroll);
_mcScrollArea.addEventListener(MouseEvent.MOUSE_DOWN, onScrollAreaClick);
}
/* CONTROL ***********************************************************/
private function onPlay(e:MouseEvent=null):void {
if (_mcPlay.currentFrame == PAUSE_STATE) {
_mcPlay.gotoAndStop(PLAY_STATE); // play
}
else if (_mcPlay.currentFrame == PLAY_STATE) {
_mcPlay.gotoAndStop(PAUSE_STATE); // pause
}
}
private function onScroll(e:MouseEvent=null):void {
_mcScroller.startDrag(false, _rScrollTrack); // move the scrollbar
stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMoveHandler);
stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUpHandler);
}
private function onMouseMoveHandler(e:MouseEvent):void {
trace( “getScrollLocation(): “+getScrollLocation() );
}
private function onMouseUpHandler(e:MouseEvent):void {
_mcScroller.stopDrag();
trace( “getScrollLocation(): “+getScrollLocation() );
stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMoveHandler);
stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUpHandler);
}
private function onScrollAreaClick(e:MouseEvent):void {
_mcScroller.x = getScrollAreaClickLocation();
trace( “getScrollLocation(): “+getScrollLocation() );
onScroll();
}
private function getScrollAreaClickLocation():Number { // returns a value 0~1
return mouseX – (_mcScroller.width / 2);
}
}
}