📄 fullscrollbar.as
字号:
package{ /*///////////////////////////////////////////////////////////////////////////////////////////////////////////////// ______ _________ ______ / ____/_ __/ / / ___/______________ / / / /_ ____ ______ / /_ / / / / / /\__ \/ ___/ ___/ __ \/ / / __ \/ __ `/ ___/ / __/ / /_/ / / /___/ / /__/ / / /_/ / / / /_/ / /_/ / / /_/ \__,_/_/_//____/\___/_/ \____/_/_/_.___/\__,_/_/ */ import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.geom.Rectangle; import flash.geom.Matrix; import flash.display.GradientType; import flash.display.SpreadMethod; public class FullScrollbar extends Sprite { public var marginTop:int = 20; public var marginBottom:int = 20; public var targetHeight:int; public var target:Sprite; private var SCRB_BACKGROUND:Sprite; private var SCRB_HANDLER:Sprite; private var SCRB_status:Boolean = false; private var SCRB_scrollY:int = 0; private var SCRB_handlerY:int = 0; private var SCRB_maxHeight:int; public function KillerScrollbar() { trace("FullScrollbar: Hello!"); }; public function resize() { SCRB_handlerY = SCRB_HANDLER.y; SCRB_scrollY = 0; render(0); }; /*///////////////////////////////////////////////////////////////////////////////////////////////////////////////// _ _ __ (_)___ (_) /_ / / __ \/ / __/ / / / / / / /_ /_/_/ /_/_/\__/ */ public function init():void { var matr:Matrix = new Matrix(); matr.createGradientBox(20, 1, 0, 0, 0); SCRB_BACKGROUND = new Sprite(); SCRB_BACKGROUND.graphics.beginGradientFill(GradientType.LINEAR, [0x999999, 0xBBBBBB], [1, 1], [0x00, 0xFF], matr, SpreadMethod.PAD); SCRB_BACKGROUND.graphics.drawRoundRect(0, 0, 20, 100, 20, 20); SCRB_BACKGROUND.graphics.endFill(); var grid1:Rectangle = new Rectangle(1, 20, 18, 60); SCRB_BACKGROUND.scale9Grid = grid1; addChild(SCRB_BACKGROUND); SCRB_HANDLER = new Sprite(); SCRB_HANDLER.graphics.beginGradientFill(GradientType.LINEAR, [0x444444, 0x000000], [1, 1], [0x00, 0xFF], matr, SpreadMethod.PAD); SCRB_HANDLER.graphics.drawRoundRect(0, 0, 20, 50, 20, 20); SCRB_HANDLER.graphics.endFill(); var grid2:Rectangle = new Rectangle(1, 20, 18, 10); SCRB_HANDLER.scale9Grid = grid2; addChild(SCRB_HANDLER); SCRB_HANDLER.addEventListener( MouseEvent.MOUSE_DOWN, EVT_HANDLER_mouseDown ); SCRB_HANDLER.addEventListener( MouseEvent.MOUSE_UP, EVT_HANDLER_mouseUp ); this.stage.addEventListener( MouseEvent.MOUSE_WHEEL, EVT_STAGE_mouseWheel ); this.stage.addEventListener( Event.MOUSE_LEAVE, EVT_STAGE_mouseLeave ); this.stage.addEventListener( Event.RESIZE, EVT_STAGE_resize ); trace("FullScrollbar: Ready"); resize(); }; /*///////////////////////////////////////////////////////////////////////////////////////////////////////////////// __ __ _____/ /_____ _____ ____ ___ _ _____ ____ / /______ / ___/ __/ __ `/ __ `/ _ \ / _ \ | / / _ \/ __ \/ __/ ___/ (__ ) /_/ /_/ / /_/ / __/ / __/ |/ / __/ / / / /_(__ ) /____/\__/\__,_/\__, /\___/ \___/|___/\___/_/ /_/\__/____/ /____/ */ public function EVT_STAGE_mouseWheel( e:MouseEvent ):void { SCRB_handlerY = SCRB_HANDLER.y; SCRB_scrollY = 0; var eDelta = int(e.delta); if( eDelta != -1 ) if( eDelta != 0 ) if( eDelta != 1 ) render( eDelta * (-6) ); }; public function EVT_STAGE_mouseMove( e:MouseEvent ):void { render(e.stageY); }; public function EVT_STAGE_releaseOutside( e:MouseEvent ):void { SCRB_status = false; e.target.stage.removeEventListener( MouseEvent.MOUSE_UP, EVT_STAGE_releaseOutside ); e.target.stage.removeEventListener( MouseEvent.MOUSE_MOVE, EVT_STAGE_mouseMove ); }; public function EVT_STAGE_mouseLeave( e:Event ):void { if( SCRB_status ) { SCRB_status = false; e.target.stage.removeEventListener( MouseEvent.MOUSE_UP, EVT_STAGE_releaseOutside ); e.target.stage.removeEventListener( MouseEvent.MOUSE_MOVE, EVT_STAGE_mouseMove ); } }; public function EVT_STAGE_resize( e:Event ):void { resize(); }; /*///////////////////////////////////////////////////////////////////////////////////////////////////////////////// __ ____ __ / /_ ____ _____ ____/ / /__ _____ ___ _ _____ ____ / /______ / __ \/ __ `/ __ \/ __ / / _ \/ ___/ / _ \ | / / _ \/ __ \/ __/ ___/ / / / / /_/ / / / / /_/ / / __/ / / __/ |/ / __/ / / / /_(__ ) /_/ /_/\__,_/_/ /_/\__,_/_/\___/_/ \___/|___/\___/_/ /_/\__/____/ */ public function EVT_HANDLER_mouseDown( e:MouseEvent ):void { SCRB_handlerY = SCRB_HANDLER.y; SCRB_scrollY = e.stageY; SCRB_HANDLER.addEventListener( MouseEvent.ROLL_OUT, EVT_HANDLER_rollOut, false, 0, true ); e.target.stage.addEventListener( MouseEvent.MOUSE_MOVE, EVT_STAGE_mouseMove, false, 0, true ); e.target.stage.addEventListener( MouseEvent.MOUSE_UP, EVT_HANDLER_mouseUp, false, 0, true ); SCRB_status = true; }; public function EVT_HANDLER_mouseMove( e:MouseEvent ):void { if( SCRB_status ) render( e.stageY ); }; public function EVT_HANDLER_rollOut( e:MouseEvent ):void { if( e.buttonDown ){ e.target.stage.addEventListener( MouseEvent.MOUSE_UP, EVT_STAGE_releaseOutside, false, 0, true ); } e.target.removeEventListener( MouseEvent.ROLL_OUT, EVT_HANDLER_rollOut ); }; public function EVT_HANDLER_mouseUp( e:MouseEvent ):void { SCRB_status = false; e.target.stage.removeEventListener( MouseEvent.MOUSE_MOVE, EVT_STAGE_mouseMove ); e.target.stage.removeEventListener( MouseEvent.MOUSE_UP, EVT_HANDLER_mouseUp ); }; /*///////////////////////////////////////////////////////////////////////////////////////////////////////////////// __ ________ ____ ____/ /__ _____ / ___/ _ \/ __ \/ __ / _ \/ ___/ / / / __/ / / / /_/ / __/ / /_/ \___/_/ /_/\__,_/\___/_/ */ public function render( Y:int ):void { targetHeight = target.height; SCRB_maxHeight = stage.stageHeight - marginTop - marginBottom; this.y = marginTop; var backgroundHeight:int = SCRB_maxHeight; if(backgroundHeight<40) backgroundHeight = 40; SCRB_BACKGROUND.height = backgroundHeight; if(target != null) { if( targetHeight > SCRB_maxHeight ) { SCRB_HANDLER.visible = true; SCRB_BACKGROUND.alpha = 1; var yTarget:int; var delta:int = Y - SCRB_scrollY; var handlerHeight:int = Math.floor( ( backgroundHeight * SCRB_maxHeight / targetHeight) / 1 ); if( handlerHeight < 30) handlerHeight = 30; SCRB_HANDLER.height = handlerHeight; if( delta <= -SCRB_handlerY ) delta = -SCRB_handlerY; if( delta > backgroundHeight - handlerHeight - SCRB_handlerY ) delta = Math.floor( backgroundHeight - handlerHeight - SCRB_handlerY ); var SCRB_handlerNewY:int = SCRB_handlerY + delta; SCRB_HANDLER.y = SCRB_handlerNewY; yTarget = Math.floor( marginTop - ( ( SCRB_handlerNewY * ( targetHeight - SCRB_maxHeight ) / ( backgroundHeight - handlerHeight ) ) ) ); target.y = yTarget; trace( "FullScrollbar: "+String( Math.floor(SCRB_handlerNewY * 100 / ( backgroundHeight - handlerHeight ) ) )+"%" ); } else { SCRB_HANDLER.y = 0; SCRB_scrollY = 0; target.y = marginTop; SCRB_HANDLER.visible = false; SCRB_BACKGROUND.alpha = .2; } } }; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -