·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[AS3]as3.0滚动条类很酷的很好用

时间:2014-01-03 11:12zpointer.iteye.com
ZScrollBar.as,[AS3]as3.0滚动条类很酷的好用

[AS3]as3.0滚动条类很酷的,很好用

  1. package zkl.controls 
  2.     import com.greensock.TweenLite; 
  3.     import com.greensock.easing.Back; 
  4.     import flash.display.DisplayObject; 
  5.     import flash.display.DisplayObjectContainer; 
  6.     import flash.display.Sprite; 
  7.     import flash.display.Stage; 
  8.     import flash.events.Event; 
  9.     import flash.events.MouseEvent; 
  10.     import flash.geom.Rectangle; 
  11.      
  12.     /** 
  13.      * 滚动条 
  14.      * 约定滚动的控制的焦点都在左上角 
  15.      * 滑块:可以被拖动的 
  16.      * 滑道:滑块所在的拖动范围 
  17.      * 内容:拖动滑块要触动的对象 
  18.      * 使用实例: 
  19.      * import zkl.controls.ZScrollBar; 
  20.      * import zkl.controls.ZScrollBarDirection; 
  21.      * var bar:ZScrollBar = new ZScrollBar(); 
  22.      * bar._stage = this.stage; 
  23.      * bar._target = _target; 
  24.      * bar._slideBar = slideBarV
  25.      * bar._scrollBar = scrollBar; 
  26.      * bar._targetScrollLength = _target.height - mask.height; 
  27.      * bar.init(); 
  28.      * @author zkl 
  29.      */ 
  30.     public class ZScrollBar extends Sprite  
  31.     { 
  32.         //所在舞台 
  33.         public var _stage:Stage; 
  34.         //被滚动的内容 
  35.         public var _target:DisplayObject; 
  36.         //内容滚动的距离 
  37.         public var _targetScrollLength:Number; 
  38.         //滚动条的滚动方向 
  39.         public var _direction:String = ZScrollBarDirection.VERTICAL; 
  40.          
  41.         //滑块 
  42.         public var _scrollBar:Sprite; 
  43.         //滑道 
  44.         public var _slideBar:Sprite; 
  45.         //四个方向的滑块 
  46.         public var _upBar:Sprite; 
  47.         public var _downBar:Sprite; 
  48.         public var _leftBar:Sprite; 
  49.         public var _rightBar:Sprite; 
  50.         //滑块滚动的速度(只有设置的方向按钮,此值才有作用) 
  51.         public var _barSpeed:Number = 5
  52.          
  53.          
  54.          
  55.         //滑块可以滑动的长度(有效的滑道) 
  56.         private var slideLength:Number; 
  57.         //滑块的滚动范围 
  58.         private var barDragRect:Rectangle; 
  59.         //对象的初始化坐标 
  60.         private var targetXY:Number = 0
  61.          
  62.         //对象滚动的方向 
  63.         private var scrollDir:int; 
  64.         private static const UP:int = 0
  65.         private static const DOWN:int = 1
  66.         private static const LEFT:int = 2
  67.         private static const RIGHT:int = 3
  68.          
  69.         public function ZScrollBar() { 
  70.              
  71.         } 
  72.          
  73.         /** 
  74.          * 初始化 
  75.          */ 
  76.         public function init():void { 
  77.             if (_stage == null)_stage = _target.stage; 
  78.             if (_direction == ZScrollBarDirection.VERTICAL) {//垂直 
  79.                 //滑块的初始位置 
  80.                 _scrollBar.x = _slideBar.x + (_slideBar.width - _scrollBar.width) / 2; 
  81.                 _scrollBar.y = _slideBar.y; 
  82.                 //有效的滑道长度 
  83.                 slideLength = _slideBar.height - _scrollBar.height; 
  84.                 //滑块的可拖动范围 
  85.                 barDragRect = new Rectangle(_slideBar.x + (_slideBar.width - _scrollBar.width) / 2, _slideBar.y, 0, slideLength); 
  86.                 // 
  87.                 targetXY = _target.y; 
  88.                  
  89.             }else if (_direction == ZScrollBarDirection.HORIZONTAL) {//水平 
  90.                 //滑块的初始位置 
  91.                 _scrollBar.x = _slideBar.x; 
  92.                 _scrollBar.y = _slideBar.y + (_slideBar.height - _scrollBar.height) / 2; 
  93.                 //有效的滑道长度 
  94.                 slideLength = _slideBar.width - _scrollBar.width; 
  95.                 //滑块的可拖动范围 
  96.                 barDragRect = new Rectangle(_slideBar.x, _slideBar.y + (_slideBar.height - _scrollBar.height) / 2, slideLength, 0); 
  97.                  
  98.                 targetXY = _target.x; 
  99.                  
  100.             }else { 
  101.                 throw new Error("direction的值设置有误,请参考ZScrollBarDirection.as"); 
  102.                 return; 
  103.             } 
  104.              
  105.             setListener(); 
  106.              
  107.         } 
  108.          
  109.         //设置监听 
  110.         private var tempBar:Sprite; 
  111.         private function setListener():void { 
  112.             //scrollBar 
  113.             _scrollBar.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); 
  114.             //dir bar 
  115.             if (_upBar != null) { 
  116.                 _upBar.addEventListener(MouseEvent.MOUSE_DOWN, dirDownHandler); 
  117.             } 
  118.             if (_downBar != null) { 
  119.                 _downBar.addEventListener(MouseEvent.MOUSE_DOWN, dirDownHandler); 
  120.             } 
  121.             if (_leftBar != null) { 
  122.                 _leftBar.addEventListener(MouseEvent.MOUSE_DOWN, dirDownHandler); 
  123.             } 
  124.             if (_rightBar != null) { 
  125.                 _rightBar.addEventListener(MouseEvent.MOUSE_DOWN, dirDownHandler); 
  126.             } 
  127.         } 
  128.         //dir bar 
  129.         private function dirDownHandler(e:MouseEvent):void { 
  130.             tempBar = e.currentTarget as Sprite; 
  131.             switch(tempBar) { 
  132.                 case _upBar: 
  133.                 scrollDir = UP
  134.                 break; 
  135.                 case _downBar: 
  136.                 scrollDir = DOWN
  137.                 break; 
  138.                 case _leftBar: 
  139.                 scrollDir = LEFT
  140.                 break; 
  141.                 case _rightBar: 
  142.                 scrollDir = RIGHT
  143.                 break; 
  144.             } 
  145.             tempBar.addEventListener(Event.ENTER_FRAME, dirEnterFrame); 
  146.             tempBar.addEventListener(MouseEvent.MOUSE_UP, dirUpHandler); 
  147.             tempBar.addEventListener(MouseEvent.MOUSE_OUT, dirUpHandler); 
  148.         } 
  149.         private function dirUpHandler(e:MouseEvent):void { 
  150.             tempBar.removeEventListener(Event.ENTER_FRAME, dirEnterFrame); 
  151.             tempBar.removeEventListener(MouseEvent.MOUSE_UP, dirUpHandler); 
  152.             tempBar.removeEventListener(MouseEvent.MOUSE_OUT, dirUpHandler); 
  153.         } 
  154.         private function dirEnterFrame(e:Event):void { 
  155.             switch(scrollDir) { 
  156.                 case UP: 
  157.                 _scrollBar.y = Math.max(_slideBar.y, _scrollBar.y - _barSpeed); 
  158.                 break; 
  159.                 case DOWN: 
  160.                 _scrollBar.y = Math.min(_slideBar.y + slideLength, _scrollBar.y + _barSpeed); 
  161.                 break; 
  162.                 case LEFT: 
  163.                 _scrollBar.x = Math.max(_slideBar.x, _scrollBar.x - _barSpeed); 
  164.                 break; 
  165.                 case RIGHT: 
  166.                 _scrollBar.x = Math.min(_slideBar.x + slideLength, _scrollBar.x + _barSpeed); 
  167.                 break; 
  168.             } 
  169.             updateTargetPos(); 
  170.         } 
  171.         //dir bar end 
  172.          
  173.         //scrollBar 
  174.         private function mouseDownHandler(e:MouseEvent):void { 
  175.             _stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); 
  176.             _scrollBar.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); 
  177.         } 
  178.         private function mouseMoveHandler(e:MouseEvent):void { 
  179.             _scrollBar.startDrag(false, barDragRect); 
  180.             _scrollBar.addEventListener(Event.ENTER_FRAME, scrollEnterFrameHandler); 
  181.         } 
  182.         private function mouseUpHandler(e:MouseEvent):void { 
  183.             _scrollBar.stopDrag(); 
  184.             _scrollBar.removeEventListener(Event.ENTER_FRAME, scrollEnterFrameHandler); 
  185.             _scrollBar.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); 
  186.             _stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); 
  187.         } 
  188.         private function scrollEnterFrameHandler(e:Event):void { 
  189.             updateTargetPos(); 
  190.         } 
  191.         //scrollBar end 
  192.          
  193.         //update 
  194.         private var percent:Number = 0
  195.         private function updateTargetPos():void { 
  196.             if (_direction == ZScrollBarDirection.VERTICAL) { 
  197.                 percent = (_scrollBar.y - _slideBar.y) / slideLength; 
  198.                 //_target.y = Math.round(targetXY - _targetScrollLength * percent); 
  199.                 TweenLite.to(_target, 0.5, { y:Math.round(targetXY - _targetScrollLength * percent), ease:Back.easeOut } ); 
  200.             }else if (_direction == ZScrollBarDirection.HORIZONTAL) { 
  201.                 percent = (_scrollBar.x - _slideBar.x) / slideLength; 
  202.                 //_target.x = Math.round(targetXY - _targetScrollLength * percent); 
  203.                 TweenLite.to(_target, 0.5, { x:Math.round(targetXY - _targetScrollLength * percent), ease:Back.easeOut } ); 
  204.             } 
  205.         } 
  206.         //////////////////////////////////////////////////////// 
  207.   
  208.         /// 
  209.     } 
  210.      

[AS3]as3.0滚动条类很酷的很好用

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器