首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

[转] 滚动条种(影片剪辑,动态文本都可用,自定义滚动条样式)

2012-10-28 
[转] 滚动条类(影片剪辑,动态文本都可用,自定义滚动条样式)以前非专职做flash,用到滚动条时都是直接网上下

[转] 滚动条类(影片剪辑,动态文本都可用,自定义滚动条样式)
以前非专职做flash,用到滚动条时都是直接网上下载使用,网上找的又五花八门,开始找到用上就要花不少时间了,最近换了工作,改专职做flash了,需要用到滚动条,就花了点时间根据自己的想法写了个。
主要功能:
1.支持影片剪辑和动态文本
2.自定义滚动条样式
第一次写,有许多不足,欢迎拍砖,要是发现有什么问题,或是有哪些不足,或有哪些地方可以优化的欢迎反馈,我会及时更改。缓动效果有时间会加上,暂时还不需要用到,就懒得去写了。
*********************************************
fla实例已上传~~至少需要CS4才能打开,因为俺是用CS5做的,所以只能保存到CS4
*********************************************
phhui_ScrollBar.as

package{    import flash.display.MovieClip;    import flash.events.MouseEvent;    import flash.events.Event;        public class phhui_ScrollBar extends MovieClip    {                public var _obj:*=this;//滚动对象                public var _type:int=0;//0:文本,1:非文本                public var _mask:*;//遮罩对象                public var _h:int=0;//滚动条高度                public var _scrollvnum:int=0;//文本显示行数                public var _v:int=5;//文本滚动速度(行/像素)                public var _scroll:*;//自定义滚动条对象                                private var _s:Number=0;//鼠标点击滑块时的纵坐标距滑块坐标距离                private var _bars:Number=0;//滑块可滑动距离                private var _bar:*;//滑块                private var _up:*;//向上按钮                private var _down:*;//向下按钮                private var _bg:*;//滑槽                                private var listenMag:ListenManager=new ListenManager();//监听管理,这个只是简单的添加删除监听而已,没有记录或判断监听对象是否已存在,如有需要可以自己进行修改,这里只是因为懒得每个监听都要写addevent...所以用的                        public function phhui_ScrollBar ()        {                                }                public function init():void{//初始化                        if(checkhide()==true){                                _bar=_scroll.pq_bar;                            _bg=_scroll.pq_bg;                    _up=_scroll.pq_up;                                _down=_scroll.pq_down;                                setxy();                        }else{                                this.visible=false;                                if(_scroll!=null){                                        _scroll.visible=false;                                }                        }                }                public function update():void{//当被滚动对象更新时,而需要改变滚动条状态,调用此方法                        if(checkhide()==false){                                this.visible=false;                                if(_scroll!=null){                                        _scroll.visible=false;                                }                        }                }                private function checkhide():Boolean{//判断是否显示滚动条                        if(_type==1&&_obj.height<=_mask.height){                                return false;                        }else if(_type==0&&int(_obj.maxScrollV)<_scrollvnum){                                return false;                        }                        return true;                }                private function setxy():void{//设置滚动条高度,对象遮罩等                        _bar.y=_bg.y;                        _bar.x=_bg.x;                        _bg.height=_h>0?_h-_up.height*2:_bg.height;                        _down.y=_bg.y+_bg.height+_down.height;                        _bars=_bg.height-_bar.height;                        if(_type==1){                                _obj.mask=_mask;                        }                        addlisten();                }                private function addlisten():void{//为滚动条添加监听事件                        listenMag.fcn_add(_bar,MouseEvent.MOUSE_DOWN,barclick);                        listenMag.fcn_add(_bar,MouseEvent.MOUSE_UP,barup);                        listenMag.fcn_add(stage,MouseEvent.MOUSE_UP,barup);                        listenMag.fcn_add(_bar,MouseEvent.MOUSE_UP,barup);                        listenMag.fcn_add(_up,MouseEvent.MOUSE_DOWN,upclick);                        listenMag.fcn_add(_down,MouseEvent.MOUSE_DOWN,downclick);                        listenMag.fcn_add(_scroll,MouseEvent.MOUSE_WHEEL,mousewheel);                        listenMag.fcn_add(_obj,MouseEvent.MOUSE_WHEEL,mousewheel);                }                private function barclick(e:MouseEvent):void{//鼠标点击滑块                        _s=mouseY-_bar.y;                        listenMag.fcn_add(_bar,Event.ENTER_FRAME,barevent);                }                private function barup(e:MouseEvent):void{//鼠标点击滑块释放                        delevent();                }                private function upclick(e:MouseEvent):void{//鼠标点击向上按钮事件                        if(checkbar()){                                if(_type==0){                                        _bar.y-=_bars*_v/_obj.maxScrollV;//滑块移动的距离=文本滚动行数*滑块可移动的总距离/文本总行数                                }else{                                        _bar.y-=_bars*_v/(_obj.height-_mask.height);//滑块移动的距离=滚动对象滚动的像素*滑块可移动的总距离/(被滚动对象的高度-遮罩的高度(即显示范围的高度))                                }                                objrun(0-_v);//调用方法移动对象                                delevent();//校正滑块位置并删除监听                        }                }                private function downclick(e:MouseEvent):void{//鼠标点击向下按钮事件                        if(checkbar()){                                if(_type==0){                                        _bar.y+=_bars*_v/_obj.maxScrollV;                                }else{                                        _bar.y+=_bars*_v/(_obj.height-_mask.height);                                }                                objrun(_v);                                delevent();                        }                }                private function mousewheel(e:MouseEvent):void{//鼠标滑轮事件                        if(e.delta>0){                                if(checkbar()){                                        _bar.y-=2;                                        if(_type==0){                                                _obj.scrollV=(_bar.y-_bg.y)*_obj.maxScrollV/_bars;                                        }else{                                                _obj.y=_mask.y-(_bar.y-_bg.y)*(_obj.height-_mask.height)/_bars;                                        }                                }else{                                        delevent();                                }                        }else{                                if(checkbar()){                                        _bar.y+=2;                                        if(_type==0){                                                _obj.scrollV=(_bar.y-_bg.y)*_obj.maxScrollV/_bars;                                        }else{                                                _obj.y=_mask.y-(_bar.y-_bg.y)*(_obj.height-_mask.height)/_bars;                                        }                                }else{                                        delevent();                                }                        }                }                private function barevent(e:Event):void{                        if(checkbar()){                                _bar.y=mouseY-_s;                                if(_type==0){                                        _obj.scrollV=(_bar.y-_bg.y)*_obj.maxScrollV/_bars;                                }else{                                        _obj.y=_mask.y-(_bar.y-_bg.y)*(_obj.height-_mask.height)/_bars;                                }                        }else{                                delevent();                        }                }                public function objrun(i:Number):void{                        if(_type==0){                                _obj.scrollV+=i;                        }else{                                _obj.y-=i;                                if(_obj.y>_mask.y){                                        _obj.y=_mask.y;                                }else if(_obj.y<(_mask.y-_obj.height+_mask.height)){                                        _obj.y=_mask.y-_obj.height+_mask.height;                                }                        }                }                public function checkbar():Boolean{                        if(_bar.y>=_bg.y&&_bar.y<=(_bars+_bg.y)){                                return true;                        }                        return false;                }                public function delevent():void{                        if(_bar.y<_bg.y){                                _bar.y=_bg.y;                        }else if(_bar.y>(_bg.y+_bg.height-_bar.height)){                                _bar.y=_bg.y+_bg.height-_bar.height;                        }                        listenMag.fcn_del(_bar,Event.ENTER_FRAME,barevent);                }        }}---------------------------------------------[b]ListenManager.as[/b]package ClassFile{        import flash.display.Sprite;        public class ListenManager extends Sprite {                public function ListenManager() {                }                public function fcn_add(obj:*,_type:String,fcn:Function):void {                        if(obj==stage){                                addEventListener(_type,fcn);                        }else{                                obj.addEventListener(_type,fcn);                        }                }                public function fcn_del(obj:*,_type:String,fcn:Function):void {                        obj.removeEventListener(_type,fcn);                }        }}

========================================================
用法:
影片剪辑:
var scr:phhui_ScrollBar=new phhui_ScrollBar();scr._type=1;scr._obj=mc;scr._mask=mc_mask;scr._h=200;scr._v=50;scr._scroll=ss;//ss为自定义的滚动条MC实例名,里面对应的四个对象名要与类中的一样,即:滑块名为pq_bar,向上的按钮名为pq_up,向下的按钮为pq_down,滑槽名为pq_bgscr.init();--------------------------动态文本:var scr:phhui_ScrollBar=new phhui_ScrollBar();scr._type=0;//默认为0,可省略scr._obj=txt;//txt动态文本实例名scr._scrollvnum=10;scr._h=200;scr._v=5;scr._scroll=ss;scr.init();



热点排行