package com.scrollbar { import flash.display.Sprite; import flash.events.MouseEvent; import flash.geom.Rectangle; import flash.events.Event; import com.scrollbar.events.ScrollbarEvent; public class ScrollBar extends Sprite { private var _percent:Number; public function get percent():Number { return _percent; } private var track:Sprite; private var marker:Sprite; public function ScrollBar() { createElements(); addEventListener( Event.ADDED_TO_STAGE, initialize ); } private function createElements():void { track = new Sprite(); track.graphics.beginFill( 0xCCCCCC, 1 ); track.graphics.drawRect( 0, 0, 10, 100 ); track.graphics.endFill(); marker = new Sprite(); marker.graphics.beginFill( 0x333333, 1 ); marker.graphics.drawRect( 0, 0, 10, 10 ); marker.graphics.endFill(); addChild( track ); addChild( marker ); } private function initialize( event:Event ):void { marker.addEventListener( MouseEvent.MOUSE_DOWN, markerPress ); stage.addEventListener( MouseEvent.MOUSE_UP, markerRelease ); } private function updatePercent( event:MouseEvent ):void { _percent = marker.y / (track.height - marker.height); dispatchEvent( new ScrollbarEvent( ScrollbarEvent.SCROLL, percent ) ); } private function markerPress( event:MouseEvent ):void { marker.startDrag( false, new Rectangle( 0, 0, 0, track.height - marker.height ) ); stage.addEventListener( MouseEvent.MOUSE_MOVE, updatePercent ); } private function markerRelease( event:MouseEvent ):void { marker.stopDrag(); stage.removeEventListener( MouseEvent.MOUSE_MOVE, updatePercent ); } } }