`

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

阅读更多
以前非专职做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_bg
scr.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();




分享到:
评论

相关推荐

    ActionScript开发人员指南中文版

    创建自定义错误类 响应错误事件和状态 比较错误类 处理错误示例:CustomErrors应用程序 第章:使用正则表达式 正则表达式基础知识 正则表达式语法 对字符串使用正则表达式的方法 正则表达式示例:Wiki解析程序 第章:...

    flash shiti

    1.Loading应该放在影片的什麽位置? A. 影片不能有Loading B. 中间 C. 后面 D. 前面 2.Flash中设置属性的命令是? A. Set Polity B. Polity C. Property D. Set Property 3.Flash action“while”意义是? ...

    css属性大全

    如`visible`(可见)、`hidden`(隐藏)、`scroll`(始终显示滚动条)、`auto`(自动显示滚动条)。 4. **剪辑区域**(`clip`):定义元素的可见区域,通常使用`rect()`函数来指定矩形区域。 以上就是根据提供的...

    易语言程序免安装版下载

    修改核心支持库,为外部数据库的连接类命令增加参数“不显示ODBC连接对话框”。 3. 修改核心支持库,解决用“播放音乐()”播放“音频采样大小为24位”的WAV文件时产生噪音的BUG。 4. 修改编译器,可以为编译出的...

    iPhone开发秘籍.part2.rar

    (共分4个part,请下载完4个part后再解压) 目录 第1章iPhone SDK 简介......1 ...UIControl 类为许多iPhone 交互式元素提供了基础,包括按钮、文本字段、滑块和开关。第8章通过 已经或尚未用文档细致记录...

    iPhone开发秘籍.part1.rar

    (共分4个part,请下载完4个part后再解压) 目录 第1章iPhone SDK 简介......1 ...UIControl 类为许多iPhone 交互式元素提供了基础,包括按钮、文本字段、滑块和开关。第8章通过 已经或尚未用文档细致记录...

    iPhone开发秘籍.part4.rar

    (共分4个part,请下载完4个part后再解压) 目录 第1章iPhone SDK 简介......1 ...UIControl 类为许多iPhone 交互式元素提供了基础,包括按钮、文本字段、滑块和开关。第8章通过 已经或尚未用文档细致记录...

    2021-2022计算机二级等级考试试题及答案No.10846.docx

    - **知识点**: 在Word等文档编辑软件中,水平滚动条用于实现文档页面的水平滚动,以便查看超出屏幕宽度的内容。此功能有助于用户更好地浏览和编辑长文档。 ### 7. 变量运算 - **知识点**: 表达式`i += i - 1`相当...

    C++MFC教程

    newWndProc就是窗口过程只要是该类的实例生成的窗口都使用该窗口过程。 所以了解了Windows的消息机制在加上对消息映射的理解就很容易了解MFC开发的基本思路了。 1.4 利用MFC进行开发的通用方法介绍 以下是我在最初...

Global site tag (gtag.js) - Google Analytics