- 在线时间
- 1863 小时
- 专家
- 0
- UID
- 58592
- 注册时间
- 2003-7-28
- 帖子
- 6153
- 精华
- 1
- 积分
- 16673
- 居住地
- 香港特别行政区 湾仔区
- 离线
- 10 天
专长: ActionScript
- 帖子
- 6153
- 体力
- 14139
- 威望
- 52
- 居住地
- 香港特别行政区 湾仔区
|
发表于 2007-12-17 09:12:31
|显示全部楼层
VerticalScrollBar
- package net.purplewind.uicomponents
- {/////////////////////////////////////////////////////////////////////////////
-
- import flash.display.Sprite;
- import flash.events.Event;
- import flash.events.MouseEvent;
- import flash.geom.Point;
- import flash.geom.Rectangle;
-
-
- public class VerticalScrollBar extends ScrollBar
- {
- //--------------------------------------------
- // 視覺效應組成
- //--------------------------------------------
- /**向上按鈕形狀*/
- public var ui_up_normal :Sprite;
- public var ui_up_select :Sprite;
- public var ui_up_press :Sprite;
- /**向下按鈕形狀*/
- public var ui_down_normal :Sprite;
- public var ui_down_select :Sprite;
- public var ui_down_press :Sprite;
- /**縱向拖曳按鈕形狀*/
- public var ui_drag_normal :Sprite;
- public var ui_drag_select :Sprite;
- public var ui_drag_press :Sprite;
- /**縱向滾動背景圖形形狀*/
- public var backShape :Sprite;
- /**占位圖形*/
- public var hidenShape :Sprite;
-
-
- //--------------------------------------------
- // 參量
- //--------------------------------------------
- /**非顯示圖形填充色*/
- protected var fillColor :Number;
- /**非顯示圖形填充透明度*/
- protected var fillAlpha :Number;
- /**縱向滾動條上邊距*/
- protected var dragTop :Number;
- /**縱向滾動條下邊距*/
- protected var dragBottom :Number;
- /**上距*/
- protected var _top :Number;
- /**左距*/
- protected var _left :Number;
- /**下距*/
- protected var _bottom :Number;
- /**右距*/
- protected var _right :Number;
- /**縱向拖曳條向上可以偏移的單位*/
- protected var _upOffset :Number;
- /**縱向拖曳條向下可以偏移的單位*/
- protected var _downOffset :Number;
- /**寬度*/
- protected var _w :Number;
- /**寬度*/
- protected var _h :Number;
-
- public function set w ( value:Number ):void {
- _w = value;
- }
- public function get w ( ):Number {
- return _w;
- }
- public function set h ( value:Number ):void {
- _h = value;
- }
- public function get h ( ):Number {
- return _h;
- }
- public function set top ( value:Number ):void {
- _top = value;
- align ();
- update ();
- }
- public function get top ( ):Number {
- return _top;
- }
- public function set left ( value:Number ):void {
- _left = value;
- align ();
- update ();
- }
- public function get left ( ):Number {
- return _left;
- }
- public function set bottom ( value:Number ):void {
- _bottom = value;
- align ();
- update ();
- }
- public function get bottom ( ):Number {
- return _bottom;
- }
- public function set right ( value:Number ):void {
- _right = value;
- align ();
- update ();
- }
- public function get right ( ):Number {
- return _right;
- }
- public function set upOffset ( value:Number ):void {
- _upOffset = value;
- }
- public function get upOffset ( ):Number {
- return _upOffset;
- }
- public function set downOffset ( value:Number ):void {
- _downOffset = value;
- }
- public function get downOffset ( ):Number {
- return _downOffset;
- }
- /**覆蓋用戶重設用戶滾動條大小*/
- override public function set height ( value:Number ):void {
- _h = value;
-
- hidenShape.graphics.clear ();
- hidenShape.graphics.beginFill ( fillColor , fillAlpha );
- hidenShape.graphics.drawRect ( 0 , 0 , _w , value );
- hidenShape.graphics.endFill ();
-
- ui_down_normal.y = value - bottom - ui_down_normal.height;
- ui_down_select.y = value - bottom - ui_down_select.height;
- ui_down_press.y = value - bottom - ui_down_press.height;
- downBtn.y = value - bottom - downBtn.height;
-
- dragTop = ui_up_normal.y + ui_up_normal.height + span - upOffset;
- dragBottom = ui_down_normal.y - span + downOffset;
-
- }
- override public function get height ():Number {
- return height;
- }
- override public function set width ( value:Number ):void {
- _w = value;
- align ();
- update ();
- }
- override public function get width():Number {
- return width;
- }
-
-
- //--------------------------------------------
- // 構造方法
- //--------------------------------------------
-
- public function VerticalScrollBar ()
- {
- super ();
- //邊距預設
- _top = 0;
- _left = 0;
- _right = 0;
- _bottom = 0;
- //拖曳偏移量預設
- _upOffset = 0;
- _downOffset = 0;
- //拖曳條縱向移動范圍預設
- dragTop = 0;
- dragBottom = 0;
- //占位圖形預設
- hidenShape = new Sprite ();
- _back.addChild(hidenShape);
- //非顯示圖形填充設定
- fillColor = 0xCCFF00;
- fillAlpha = 0;
- }
-
-
-
- /**
- * 填充組件實例
- * @return Boolean 是否填充完成
- */
- public function fill ():Boolean {
- if ( ui_up_normal==null || ui_up_select ==null || ui_up_press ==null
- || ui_down_normal==null || ui_down_select==null || ui_down_press==null
- || ui_drag_normal==null || ui_drag_select==null || ui_drag_press==null )
- {
- return false;
- } else {
- dispatchDisplayObjects ();
- return true;
- }
- }
-
-
- //--------------------------------------------
- // 預備區域
- //--------------------------------------------
- /**
- * 屬性刷新
- */
- protected function update ():void {
- dragTop = ui_up_normal.y + ui_up_normal.height + span - upOffset;
- dragBottom = ui_down_normal.y - span + downOffset;
- }
- /**
- * 安排元素位置
- */
- protected function align ():void {
-
- ui_up_normal.width = _w - _left - _right;
- ui_up_select.width = _w - _left - _right;
- ui_up_press.width = _w - _left - _right;
- upBtn.width = _w - _left - _right;
- ui_down_normal.width = _w - _left - _right;
- ui_down_select.width = _w - _left - _right;
- ui_down_press.width = _w - _left - _right;
- downBtn.width = _w - _left - _right;
- ui_drag_normal.width = _w - _left - _right;
- ui_drag_select.width = _w - _left - _right;
- ui_drag_press.width = _w - _left - _right;
- dragBtn.width = _w - _left - _right;
-
-
- ui_up_normal .x = _left;
- ui_up_normal .y = _top;
- ui_up_select .x = _left;
- ui_up_select .y = _top;
- ui_up_press .x = _left;
- ui_up_press .y = _top;
- //down
- ui_down_normal.x = _left;
- ui_down_normal.y = hidenShape.height - ui_down_normal.height - bottom;
- ui_down_select.x = _left;
- ui_down_select.y = hidenShape.height - ui_down_normal.height - bottom;
- ui_down_press .x = _left;
- ui_down_press .y = hidenShape.height - ui_down_normal.height - bottom;
- //drag
- ui_drag_normal.x = _left;
- ui_drag_normal.y = _top + ui_up_normal.height +span - _upOffset;
- ui_drag_select.x = _left;
- ui_drag_select.y = _top + ui_up_normal.height +span - _upOffset;
- ui_drag_press .x = _left;
- ui_drag_press .y = _top + ui_up_normal.height +span - _upOffset;
-
- upBtn .x = _left;
- upBtn .y = _top;
- //down
- downBtn.x = _left;
- downBtn.y = hidenShape.height - ui_down_normal.height - bottom;
- //drag
- dragBtn.x = _left;
- dragBtn.y = _top + ui_up_normal.height + span - _upOffset;
- }
- /**
- * 分派圖形顯示 元素
- */
- protected function dispatchDisplayObjects ():void {
- _w = _left+ui_up_normal.width+_right;
- _h = _top+ui_up_normal.height-upOffset-downOffset+ui_drag_normal.height+ui_down_normal.height+_bottom+2*span;
- align ();
- update ();
- hidenShape.graphics.clear();
- hidenShape.graphics.beginFill ( fillColor , fillAlpha );
- hidenShape.graphics.drawRect ( 0,0,_w,_h);
- //加入到現實列表
- drawButtons ();
- _back.addChild ( ui_up_normal );
- ui_up_select.visible = false;
- ui_up_press.visible = false;
- _back.addChild ( ui_up_select );
- _back.addChild ( ui_up_press );
- //
- _back.addChild ( ui_down_normal );
- ui_down_select.visible = false;
- ui_down_press.visible = false;
- _back.addChild ( ui_down_select );
- _back.addChild ( ui_down_press );
- //
- _back.addChild ( ui_drag_normal );
- ui_drag_select.visible = false;
- ui_drag_press.visible = false;
- _back.addChild ( ui_drag_select );
- _back.addChild ( ui_drag_press );
-
- }
- /**
- * 繪制背景
- */
- protected function drawBackground ():void {
- //clear
- backLayer.removeChild ( _back );
- _back = new Sprite ();
- backLayer.addChild ( _back );
- //draw background
- _back.addChild ( backShape );
- }
- /**
- * 繪制按鈕
- */
- protected function drawButtons ():void {
- //clear
- btnsLayer.removeChild ( _btns );
- _btns = new Sprite ();
- //draw buttons
- upBtn = new Sprite ();
- downBtn = new Sprite ();
- dragBtn = new Sprite ();
- upBtn.graphics.beginFill ( fillColor , fillAlpha );
- downBtn.graphics.beginFill ( fillColor , fillAlpha );
- dragBtn.graphics.beginFill ( fillColor , fillAlpha );
- upBtn.graphics.drawRect ( 0 , 0 , ui_up_normal.width , ui_up_normal.height );
- downBtn.graphics.drawRect ( 0 , 0 , ui_down_normal.width , ui_down_normal.height );
- dragBtn.graphics.drawRect ( 0 , 0 , ui_drag_normal.width , ui_drag_normal.height );
- //
- //up
- _btns.addChild ( upBtn );
- _btns.addChild ( downBtn );
- _btns.addChild ( dragBtn );
- //draw buttons complete
- btnsLayer.addChild ( _btns );
-
- dispatchListenersForUp ();
- dispatchListenersForDown ();
- dispatchListenersForDrag ();
- }
- /**
- * 添加向上按鈕事件分派
- */
- protected function dispatchListenersForUp ():void {
- var hasClickEvent:Boolean = upBtn.hasEventListener ( MouseEvent.CLICK );
- var hasOverEvent:Boolean = upBtn.hasEventListener ( MouseEvent.ROLL_OVER );
- var hasOutEvent:Boolean = upBtn.hasEventListener ( MouseEvent.ROLL_OUT );
- var hasUpEvent:Boolean = upBtn.hasEventListener ( MouseEvent.MOUSE_UP );
- var hasDownEvent:Boolean = upBtn.hasEventListener ( MouseEvent.MOUSE_DOWN );
- var hasLeaveEvent:Boolean = stage.hasEventListener ( Event.MOUSE_LEAVE );
- if ( hasClickEvent ) {
- upBtn.removeEventListener ( MouseEvent.CLICK , upClick );
- }
- if ( hasOverEvent ) {
- upBtn.removeEventListener ( MouseEvent.ROLL_OVER , upRollOver );
- }
- if ( hasOutEvent ) {
- upBtn.removeEventListener ( MouseEvent.ROLL_OUT , upRollOut );
- }
- if ( hasUpEvent ) {
- upBtn.removeEventListener ( MouseEvent.MOUSE_UP , upUp );
-
- }
- if ( hasDownEvent ) {
- upBtn.removeEventListener ( MouseEvent.MOUSE_DOWN , upDown );
- }
- upBtn.addEventListener ( MouseEvent.CLICK , upClick );
- upBtn.addEventListener ( MouseEvent.ROLL_OVER , upRollOver );
- upBtn.addEventListener ( MouseEvent.ROLL_OUT , upRollOut );
- upBtn.addEventListener ( MouseEvent.MOUSE_UP , upUp );
- upBtn.addEventListener ( MouseEvent.MOUSE_DOWN , upDown );
- }
- /**
- * 添加向下按鈕事件分派
- */
- protected function dispatchListenersForDown ():void {
- var hasClickEvent:Boolean = downBtn.hasEventListener ( MouseEvent.CLICK );
- var hasOverEvent:Boolean = downBtn.hasEventListener ( MouseEvent.ROLL_OVER );
- var hasOutEvent:Boolean = downBtn.hasEventListener ( MouseEvent.ROLL_OUT );
- var hasUpEvent:Boolean = downBtn.hasEventListener ( MouseEvent.MOUSE_UP );
- var hasDownEvent:Boolean = downBtn.hasEventListener ( MouseEvent.MOUSE_DOWN );
- var hasLeaveEvent:Boolean = stage.hasEventListener ( Event.MOUSE_LEAVE );
- if ( hasClickEvent ) {
- downBtn.removeEventListener ( MouseEvent.CLICK , downClick );
- }
- if ( hasOverEvent ) {
- downBtn.removeEventListener ( MouseEvent.ROLL_OVER , downRollOver );
- }
- if ( hasOutEvent ) {
- downBtn.removeEventListener ( MouseEvent.ROLL_OUT , downRollOut );
- }
- if ( hasUpEvent ) {
- downBtn.removeEventListener ( MouseEvent.MOUSE_UP , downUp );
-
- }
- if ( hasDownEvent ) {
- downBtn.removeEventListener ( MouseEvent.MOUSE_DOWN , downDown );
- }
- downBtn.addEventListener ( MouseEvent.CLICK , downClick );
- downBtn.addEventListener ( MouseEvent.ROLL_OVER , downRollOver );
- downBtn.addEventListener ( MouseEvent.ROLL_OUT , downRollOut );
- downBtn.addEventListener ( MouseEvent.MOUSE_UP , downUp );
- downBtn.addEventListener ( MouseEvent.MOUSE_DOWN , downDown );
- }
- /**
- * 添加拖曳條事件分派
- */
- protected function dispatchListenersForDrag ():void {
- var hasUpEvent:Boolean = dragBtn.hasEventListener ( MouseEvent.MOUSE_UP );
- var hasDownEvent:Boolean = dragBtn.hasEventListener ( MouseEvent.MOUSE_DOWN );
- var hasMoveEvent:Boolean = dragBtn.hasEventListener ( MouseEvent.MOUSE_MOVE );
- if ( hasUpEvent ) {
- dragBtn.removeEventListener ( MouseEvent.MOUSE_UP , dragUp );
- }
- if ( hasDownEvent ) {
- dragBtn.removeEventListener ( MouseEvent.MOUSE_DOWN , dragDown );
- }
- if ( hasMoveEvent ) {
- dragBtn.removeEventListener ( MouseEvent.MOUSE_MOVE , dragMove );
- }
- dragBtn.addEventListener ( MouseEvent.ROLL_OVER , dragRollOver );
- dragBtn.addEventListener ( MouseEvent.ROLL_OUT , dragRollOut );
- dragBtn.addEventListener ( MouseEvent.MOUSE_UP , dragUp );
- dragBtn.addEventListener ( MouseEvent.MOUSE_DOWN , dragDown );
- }
-
- //--------------------------------------------
- // 鼠標事件處理器
- //--------------------------------------------
- /**上滾按鈕點擊*/
- override protected function upClick ( event:Event ):void {
- //override
- }
- /**下滾按鈕點擊*/
- override protected function downClick ( event:Event ):void {
- //override
- }
- /**上滾按鈕滑過*/
- override protected function upRollOver ( event:Event ):void {
- super.upRollOver ( event );
- ui_up_select.visible = true;
- }
- /**上滾按鈕滑出*/
- override protected function upRollOut ( event:Event ):void {
- super.upRollOut ( event );
- ui_up_select.visible = false;
- }
- /**上滾按鈕按下*/
- override protected function upDown ( event:Event ):void {
- super.upDown ( event );
- ui_up_press.visible = true;
- clearTemp ();
- var temp:Sprite = new Sprite ();
- temp.x = globalToLocal(new Point(0,0)).x;
- temp.y = globalToLocal(new Point(0,0)).y;
- temp.graphics.beginFill ( fillColor , fillAlpha );
- temp.addEventListener ( MouseEvent.MOUSE_UP , upReleaseOutSide );
- temp.graphics.drawRect ( 0,0,stage.stageWidth , stage.stageHeight );
- stage.addEventListener(Event.MOUSE_LEAVE,upLeave);
- _temp.addChild ( temp );
- }
- /**上滾按鈕移動*/
- override protected function upLeave ( event:Event ):void {
- super.upLeave ( event );
- upUp ( event );
- stage.removeEventListener ( Event.MOUSE_LEAVE , upLeave );
- }
- /**上滾按鈕外部釋放*/
- override protected function upReleaseOutSide ( event:Event ):void {
- super.upReleaseOutSide ( event );
- clearTemp ();
- ui_up_press.visible = false;
- event.target.removeEventListener ( MouseEvent.MOUSE_UP , upReleaseOutSide );
- }
- /**上滾按鈕松開*/
- override protected function upUp ( event:Event ):void {
- super.upUp ( event );
- ui_up_press.visible = false;
- try {
- stage.removeEventListener ( Event.MOUSE_LEAVE , dragLeave );
- } catch ( e:Error ) {}
- clearTemp ();
- }
- //////////////////////////////////////////////////
- /**下滾按鈕滑過*/
- override protected function downRollOver ( event:Event ):void {
- super.downRollOver ( event );
- ui_down_select.visible = true;
- }
- /**下滾按鈕滑出*/
- override protected function downRollOut ( event:Event ):void {
- super.downRollOut( event );
- ui_down_select.visible = false;
- }
- /**下滾按鈕按下*/
- override protected function downDown ( event:Event ):void {
- super.downDown ( event );
- ui_down_press.visible = true;
- clearTemp ();
- var temp:Sprite = new Sprite ();
- temp.x = globalToLocal(new Point(0,0)).x;
- temp.y = globalToLocal(new Point(0,0)).y;
- temp.graphics.beginFill ( fillColor , fillAlpha );
- temp.graphics.drawRect ( 0,0,stage.stageWidth , stage.stageHeight );
- temp.addEventListener ( MouseEvent.MOUSE_UP , downReleaseOutSide );
- stage.addEventListener(Event.MOUSE_LEAVE,downLeave);
- _temp.addChild ( temp );
- }
- /**下滾按鈕松開*/
- override protected function downUp ( event:Event ):void {
- super.downUp ( event );
- ui_down_press.visible = false;
- try {
- stage.removeEventListener ( Event.MOUSE_LEAVE , downLeave );
- } catch ( e:Error ) {}
- clearTemp ();
- }
- /**下滾按鈕移動*/
- override protected function downLeave ( event:Event ):void {
- super.downLeave ( event );
- downUp ( event );
- stage.removeEventListener ( Event.MOUSE_LEAVE , downLeave );
- }
- override protected function downReleaseOutSide ( event:Event ):void {
- super.downReleaseOutSide ( event );
- clearTemp ();
- ui_down_press.visible = false;
- event.target.removeEventListener ( MouseEvent.MOUSE_UP , downReleaseOutSide );
- }
- //////////////////////////////////////////////////
- /**拖曳條滑過*/
- override protected function dragRollOver ( event:Event ):void {
- super.dragRollOver ( event );
- ui_drag_select.visible = true;
- }
- /**拖曳條滑出*/
- override protected function dragRollOut ( event:Event ):void {
- super.dragRollOut ( event );
- ui_drag_select.visible = false;
- }
- /**拖曳條按下*/
- override protected function dragDown ( event:Event ):void {
- super.dragDown ( event );
- ui_drag_press.visible = true;
- //
- var temp:Sprite = new Sprite ();
- temp.x = globalToLocal(new Point(0,0)).x;
- temp.y = globalToLocal(new Point(0,0)).y;
- temp.graphics.beginFill ( fillColor , fillAlpha );
- temp.graphics.drawRect ( 0,0,stage.stageWidth , stage.stageHeight );
- temp.addEventListener ( MouseEvent.MOUSE_UP , dragReleaseOutSide );
- temp.addEventListener ( MouseEvent.MOUSE_MOVE , dragMove );
- stage.addEventListener ( Event.MOUSE_LEAVE , dragLeave );
- _temp.addChild ( temp );
- //
- var area:Rectangle = new Rectangle ( _left , dragTop , 0 , Math.abs ( dragBottom-dragBtn.height-dragTop ) );
- dragBtn.startDrag ( false , area );
- }
- /**拖曳條在自己圖形範圍內鬆開*/
- override protected function dragUp ( event:Event ):void {
- super.dragUp ( event );
- ui_drag_press.visible = false;
- try {
- stage.removeEventListener ( Event.MOUSE_LEAVE , dragLeave );
- } catch ( e:Error ) {}
- clearTemp ();
- dragBtn.stopDrag ();
- ui_drag_normal.x = dragBtn.x;
- ui_drag_select.x = dragBtn.x;
- ui_drag_press. x = dragBtn.x;
- ui_drag_normal.y = dragBtn.y;
- ui_drag_select.y = dragBtn.y;
- ui_drag_press. y = dragBtn.y;
- }
- /**拖曳條移動*/
- override protected function dragMove ( event:Event ):void {
- super.dragMove ( event );
- ui_drag_normal.x = dragBtn.x;
- ui_drag_select.x = dragBtn.x;
- ui_drag_press. x = dragBtn.x;
- ui_drag_normal.y = dragBtn.y;
- ui_drag_select.y = dragBtn.y;
- ui_drag_press. y = dragBtn.y;
- }
- /**拖曳條移出了舞臺*/
- override protected function dragLeave ( event:Event ):void {
- super.dragLeave ( event );
- dragUp ( event );
- stage.removeEventListener ( Event.MOUSE_LEAVE , dragLeave );
- dragBtn.stopDrag ();
- }
- /**拖曳條在自己圖形範圍外鬆開*/
- override protected function dragReleaseOutSide ( event:Event ):void {
- super.dragReleaseOutSide ( event );
- clearTemp ();
- ui_drag_press.visible = false;
- event.target.removeEventListener ( MouseEvent.MOUSE_UP , dragReleaseOutSide );
- dragBtn.stopDrag ();
- }
- }//end class
-
- }/////////////////////////////////////////////////////////////////////////////
复制代码
[ 本帖最后由 enc0717 于 2007-12-26 10:06 编辑 ] |
|