[AS3] BasicScrollBar (no buttons)
package {
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Rectangle;
public class BasicScrollBar {
private var _mcScrollBar:MovieClip;
private var _mcScrollArea:MovieClip; // the area under the scroller
private var _mcScroller:MovieClip; // the scroller is the thing that you can drag to scroll
private var _mcScrolled:MovieClip; // the area that is actually scrolled
private var _mcScrolledMask:MovieClip; // mask for scrolled
private var _scrollTrack:Rectangle;
protected var _nScrollerLocation:Number; // a 0~1 value
public function BasicScrollBar(mcScrollBar:MovieClip) {
_mcScrollBar = mcScrollBar;
_mcScrollArea = _mcScrollBar.getChildByName(“mcScrollArea”) as MovieClip;
_mcScroller = _mcScrollBar.getChildByName(“mcScroller”) as MovieClip;
_mcScrolled = _mcScrollBar.getChildByName(“mcScrolled”) as MovieClip;
_mcScrolledMask = _mcScrollBar.getChildByName(“mcScrolledMask”) as MovieClip;
_mcScrolled.mask = _mcScrolledMask;
_scrollTrack = new Rectangle(_mcScroller.width/2, 0, 0, _mcScrollArea.height – _mcScroller.height); // scroll track
_mcScroller.addEventListener(MouseEvent.MOUSE_DOWN, OnMouseDown);
}
private function OnMouseDown(e:MouseEvent):void {
_mcScroller.startDrag(false, _scrollTrack);
_mcScrollBar.stage.addEventListener(MouseEvent.MOUSE_MOVE, OnMouseMoveHandler);
_mcScrollBar.stage.addEventListener(MouseEvent.MOUSE_UP, OnMouseUpHandler);
}
private function OnMouseMoveHandler(e:MouseEvent):void {
_nScrollerLocation = – (_mcScroller.y) / (_mcScrollArea.height – _mcScroller.height);
SetScrolled( _nScrollerLocation );
}
private function OnMouseUpHandler(e:MouseEvent):void {
_mcScroller.stopDrag();
_mcScrollBar.stage.removeEventListener(MouseEvent.MOUSE_MOVE, OnMouseMoveHandler);
_mcScrollBar.stage.removeEventListener(MouseEvent.MOUSE_UP, OnMouseUpHandler);
}
private function SetScrolled(nLocation:Number):void { // takes values between 0~1
var nScrollBarTotalHeight:Number = _mcScrollArea.height;
var nScrollAmountTotal:Number = _mcScrolled.height – nScrollBarTotalHeight;
var nNewPosition:Number = nLocation * nScrollAmountTotal;
if (nNewPosition <= 0) {
_mcScrolled.y = nNewPosition;
}
}
}
}
