[AS3]as3.0滚动条类很酷的很好用
ZScrollBar.as,[AS3]as3.0滚动条类很酷的好用
[AS3]as3.0滚动条类很酷的,很好用
- package zkl.controls
- {
- import com.greensock.TweenLite;
- import com.greensock.easing.Back;
- import flash.display.DisplayObject;
- import flash.display.DisplayObjectContainer;
- import flash.display.Sprite;
- import flash.display.Stage;
- import flash.events.Event;
- import flash.events.MouseEvent;
- import flash.geom.Rectangle;
- /**
- * 滚动条
- * 约定滚动的控制的焦点都在左上角
- * 滑块:可以被拖动的
- * 滑道:滑块所在的拖动范围
- * 内容:拖动滑块要触动的对象
- * 使用实例:
- * import zkl.controls.ZScrollBar;
- * import zkl.controls.ZScrollBarDirection;
- * var bar:ZScrollBar = new ZScrollBar();
- * bar._stage = this.stage;
- * bar._target = _target;
- * bar._slideBar = slideBarV;
- * bar._scrollBar = scrollBar;
- * bar._targetScrollLength = _target.height - mask.height;
- * bar.init();
- * @author zkl
- */
- public class ZScrollBar extends Sprite
- {
- //所在舞台
- public var _stage:Stage;
- //被滚动的内容
- public var _target:DisplayObject;
- //内容滚动的距离
- public var _targetScrollLength:Number;
- //滚动条的滚动方向
- public var _direction:String = ZScrollBarDirection.VERTICAL;
- //滑块
- public var _scrollBar:Sprite;
- //滑道
- public var _slideBar:Sprite;
- //四个方向的滑块
- public var _upBar:Sprite;
- public var _downBar:Sprite;
- public var _leftBar:Sprite;
- public var _rightBar:Sprite;
- //滑块滚动的速度(只有设置的方向按钮,此值才有作用)
- public var _barSpeed:Number = 5;
- //滑块可以滑动的长度(有效的滑道)
- private var slideLength:Number;
- //滑块的滚动范围
- private var barDragRect:Rectangle;
- //对象的初始化坐标
- private var targetXY:Number = 0;
- //对象滚动的方向
- private var scrollDir:int;
- private static const UP:int = 0;
- private static const DOWN:int = 1;
- private static const LEFT:int = 2;
- private static const RIGHT:int = 3;
- public function ZScrollBar() {
- }
- /**
- * 初始化
- */
- public function init():void {
- if (_stage == null)_stage = _target.stage;
- if (_direction == ZScrollBarDirection.VERTICAL) {//垂直
- //滑块的初始位置
- _scrollBar.x = _slideBar.x + (_slideBar.width - _scrollBar.width) / 2;
- _scrollBar.y = _slideBar.y;
- //有效的滑道长度
- slideLength = _slideBar.height - _scrollBar.height;
- //滑块的可拖动范围
- barDragRect = new Rectangle(_slideBar.x + (_slideBar.width - _scrollBar.width) / 2, _slideBar.y, 0, slideLength);
- //
- targetXY = _target.y;
- }else if (_direction == ZScrollBarDirection.HORIZONTAL) {//水平
- //滑块的初始位置
- _scrollBar.x = _slideBar.x;
- _scrollBar.y = _slideBar.y + (_slideBar.height - _scrollBar.height) / 2;
- //有效的滑道长度
- slideLength = _slideBar.width - _scrollBar.width;
- //滑块的可拖动范围
- barDragRect = new Rectangle(_slideBar.x, _slideBar.y + (_slideBar.height - _scrollBar.height) / 2, slideLength, 0);
- targetXY = _target.x;
- }else {
- throw new Error("direction的值设置有误,请参考ZScrollBarDirection.as");
- return;
- }
- setListener();
- }
- //设置监听
- private var tempBar:Sprite;
- private function setListener():void {
- //scrollBar
- _scrollBar.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
- //dir bar
- if (_upBar != null) {
- _upBar.addEventListener(MouseEvent.MOUSE_DOWN, dirDownHandler);
- }
- if (_downBar != null) {
- _downBar.addEventListener(MouseEvent.MOUSE_DOWN, dirDownHandler);
- }
- if (_leftBar != null) {
- _leftBar.addEventListener(MouseEvent.MOUSE_DOWN, dirDownHandler);
- }
- if (_rightBar != null) {
- _rightBar.addEventListener(MouseEvent.MOUSE_DOWN, dirDownHandler);
- }
- }
- //dir bar
- private function dirDownHandler(e:MouseEvent):void {
- tempBar = e.currentTarget as Sprite;
- switch(tempBar) {
- case _upBar:
- scrollDir = UP;
- break;
- case _downBar:
- scrollDir = DOWN;
- break;
- case _leftBar:
- scrollDir = LEFT;
- break;
- case _rightBar:
- scrollDir = RIGHT;
- break;
- }
- tempBar.addEventListener(Event.ENTER_FRAME, dirEnterFrame);
- tempBar.addEventListener(MouseEvent.MOUSE_UP, dirUpHandler);
- tempBar.addEventListener(MouseEvent.MOUSE_OUT, dirUpHandler);
- }
- private function dirUpHandler(e:MouseEvent):void {
- tempBar.removeEventListener(Event.ENTER_FRAME, dirEnterFrame);
- tempBar.removeEventListener(MouseEvent.MOUSE_UP, dirUpHandler);
- tempBar.removeEventListener(MouseEvent.MOUSE_OUT, dirUpHandler);
- }
- private function dirEnterFrame(e:Event):void {
- switch(scrollDir) {
- case UP:
- _scrollBar.y = Math.max(_slideBar.y, _scrollBar.y - _barSpeed);
- break;
- case DOWN:
- _scrollBar.y = Math.min(_slideBar.y + slideLength, _scrollBar.y + _barSpeed);
- break;
- case LEFT:
- _scrollBar.x = Math.max(_slideBar.x, _scrollBar.x - _barSpeed);
- break;
- case RIGHT:
- _scrollBar.x = Math.min(_slideBar.x + slideLength, _scrollBar.x + _barSpeed);
- break;
- }
- updateTargetPos();
- }
- //dir bar end
- //scrollBar
- private function mouseDownHandler(e:MouseEvent):void {
- _stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
- _scrollBar.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
- }
- private function mouseMoveHandler(e:MouseEvent):void {
- _scrollBar.startDrag(false, barDragRect);
- _scrollBar.addEventListener(Event.ENTER_FRAME, scrollEnterFrameHandler);
- }
- private function mouseUpHandler(e:MouseEvent):void {
- _scrollBar.stopDrag();
- _scrollBar.removeEventListener(Event.ENTER_FRAME, scrollEnterFrameHandler);
- _scrollBar.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
- _stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
- }
- private function scrollEnterFrameHandler(e:Event):void {
- updateTargetPos();
- }
- //scrollBar end
- //update
- private var percent:Number = 0;
- private function updateTargetPos():void {
- if (_direction == ZScrollBarDirection.VERTICAL) {
- percent = (_scrollBar.y - _slideBar.y) / slideLength;
- //_target.y = Math.round(targetXY - _targetScrollLength * percent);
- TweenLite.to(_target, 0.5, { y:Math.round(targetXY - _targetScrollLength * percent), ease:Back.easeOut } );
- }else if (_direction == ZScrollBarDirection.HORIZONTAL) {
- percent = (_scrollBar.x - _slideBar.x) / slideLength;
- //_target.x = Math.round(targetXY - _targetScrollLength * percent);
- TweenLite.to(_target, 0.5, { x:Math.round(targetXY - _targetScrollLength * percent), ease:Back.easeOut } );
- }
- }
- ////////////////////////////////////////////////////////
- ///
- }
- }
[AS3]as3.0滚动条类很酷的很好用
热门文章推荐
- [HLS]做自己的m3u8点播系统使用HTTP Live Streaming(HLS技术)
- [FMS]FMS流媒体服务器配置与使用相关的介绍
- [AS3]什么是M3U8,与HTML5的区别是什么
- AS2.0 让flash自适应全屏,并且不自动缩放
- [AS3]as3.0的sound类常用技巧整理
- [AS3]as3与ByteArray详解、ByteArray介绍、ByteArray用法
- 关于RTMP,RTMPT,RTMPS,RTMPE,RTMPTE协议的介绍
- [JS]分享浏览器弹出窗口不被拦截JS示例
请稍候...