`
hereson
  • 浏览: 1428048 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

AS3.0写的一个滚动条【缓动效果】

阅读更多

package
{
    import flash.display.MovieClip;
    import flash.events.MouseEvent;
    import flash.events.Event;
    import flash.geom.Rectangle;
    
    public class myScrollBar extends MovieClip
    {
        
        private var moveSpeed:Number = 5;//滚动速度
        private var easingSpeed:Number = 4.5;//缓动速度

        private var contentName:MovieClip;
        private var maskViewName:MovieClip;
        
        /*需要用到的变量来计算拖动值*/
        private var scrollable:Number;
        private var scrollHeight:Number;
        private var top_scroll:Number;

        private var rx:Number;
        private var ry:Number;
        private var rwidth:Number;
        private var rheight:Number;
        
        private var easing:Boolean = true;
        
        public function myScrollBar ()
        {
            init();
        }
        //定义滚动控制影片的位置
        public function init ()
        {
            /*在此修改遮罩名:maskMc 和 被遮罩[内容]名:contentMc*/
            maskViewName = MovieClip(parent).maskMc
            contentName = MovieClip(parent).contentMc
            
            //设置遮罩
            contentName.mask = maskViewName
            
            //强制固定可控制元件的所有属性
            upBtn.y = maskViewName.y;//向上滚动按钮的位置
            
            downBtn.x = upBtn.x;
            
            scrollBg.x = upBtn.x;
            scrollBg.y = upBtn.y + upBtn.height;//滚动背景的y坐标
            scrollBg.height = downBtn.y - upBtn.height - upBtn.y;//滚动背景的高度
            
            dragBar.x = upBtn.x;
            dragBar.y = upBtn.y + upBtn.height;
            
            scrollHeight = scrollBg.height
            scrollable = contentName.height - maskViewName.height;
            top_scroll = contentName.y;
            
            //滑块可拖动的区域
            rx = scrollBg.x;
            ry = upBtn.y+upBtn.height;
            rwidth = 0;
            rheight = scrollBg.height - dragBar.height+1;
            
            //在开始前检测我们的滚动是否可滚动,如果内容不足滚动,隐藏dragger等,并返回。
            if (scrollable < 0)
            {
                dragBar.visible = false;
                return;
            }
            myBtnEvent()
            updateContentPos ()
        }
        //更新滚动内容的位置。公式的应用
        private function updateContentPos ()
        {
            var percent_scrolled:Number=(dragBar.y - upBtn.height) / (scrollHeight - dragBar.height);
            contentName.newY = Math.round(top_scroll -(scrollable * percent_scrolled));
            //contentName.y=Math.round(top_scroll - (scrollable * percent_scrolled));
            
            //缓动效果
            contentName.addEventListener(Event.ENTER_FRAME,easingFunc)
        }
        private function easingFunc(event:Event)
        {
            if(!easing)
             {
                 event.target.y = event.target.newY
             }
             else
             {
                 event.target.y += (event.target.newY-event.target.y)/easingSpeed
             }
        }
        
        //滚动按钮事件
        private function myBtnEvent()
        {
            upBtn.addEventListener(MouseEvent.MOUSE_DOWN,upBtnDownFunc) //向上按钮鼠标按下事件
            dragBar.addEventListener(MouseEvent.MOUSE_DOWN,dragBarDownFunc) //滑块按钮鼠标按下事件
            downBtn.addEventListener(MouseEvent.MOUSE_DOWN,downBtnDownFunc) //向下按钮鼠标按下事件
        }
        
        
        //向上按钮
        private function upBtnDownFunc(event:Event)
        {
            event.target.addEventListener(Event.ENTER_FRAME,upBtnMoveFunc);
            event.target.addEventListener(MouseEvent.MOUSE_UP,upBtnUpFunc);
            event.target.addEventListener(MouseEvent.MOUSE_OUT,upBtnOutFunc);
        }
        private function upBtnMoveFunc(event:Event)
        {
            dragBar.y = Math.max (ry, dragBar.y - moveSpeed);
            updateContentPos ()
        }
        private function upBtnUpFunc(event:Event)
        {
            event.target.removeEventListener(Event.ENTER_FRAME,upBtnMoveFunc);
        }
        private function upBtnOutFunc(event:MouseEvent)
        {
            event.target.removeEventListener(Event.ENTER_FRAME,upBtnMoveFunc);
        }
        
        //向下按钮
        private function downBtnDownFunc(event:Event)
        {
            event.target.addEventListener(Event.ENTER_FRAME,downBtnMoveFunc);
            event.target.addEventListener(MouseEvent.MOUSE_UP,downBtnUpFunc);
            event.target.addEventListener(MouseEvent.MOUSE_OUT,downBtnOutFunc);
        }
        private function downBtnMoveFunc(event:Event)
        {
            dragBar.y = Math.min (rheight+event.target.height, dragBar.y + moveSpeed);
            updateContentPos ()
        }
        private function downBtnUpFunc(event:Event)
        {
            event.target.removeEventListener(Event.ENTER_FRAME,downBtnMoveFunc);
        }
        private function downBtnOutFunc(event:Event)
        {
            event.target.removeEventListener(Event.ENTER_FRAME,downBtnMoveFunc);
        }
        
        //滑块事件
        private function dragBarDownFunc(event:Event)
        {
            var rec:Rectangle = new Rectangle(rx,ry,rwidth,rheight);
            event.target.startDrag(false,rec)
            event.target.addEventListener(MouseEvent.MOUSE_MOVE,dragBarEnterFunc) //滑块按钮鼠标松开事件
            
            event.target.addEventListener(MouseEvent.MOUSE_UP,dragBarUpFunc) //滑块按钮鼠标松开事件
            event.target.addEventListener(MouseEvent.MOUSE_OUT,dragBarOutFunc)
        }
        private function dragBarUpFunc(event:Event)
        {
            event.target.stopDrag();
            event.target.removeEventListener(MouseEvent.MOUSE_MOVE,dragBarEnterFunc);
        }
        private function dragBarOutFunc(event:Event)
        {
            event.target.stopDrag();
            event.target.removeEventListener(MouseEvent.MOUSE_OUT,dragBarEnterFunc);
        }
        private function dragBarEnterFunc(event:Event)
        {
            updateContentPos ()
        }
        
    }
}

分享到:
评论
4 楼 hereson 2011-01-14  
wangwanttt 写道
兄弟,咋没FLASH文件啊,搞个源文件下载啊

代做flex作业
3 楼 hereson 2011-01-13  
zznj1123 写道
怎么没有例子?可以用到flex里面吗?盼回答,谢谢

代做flex作业
2 楼 zznj1123 2011-01-06  
怎么没有例子?可以用到flex里面吗?盼回答,谢谢
1 楼 wangwanttt 2009-06-13  
兄弟,咋没FLASH文件啊,搞个源文件下载啊

相关推荐

    flash元件滚动条(AS3.0)

    先介绍下我这个flash拖动条吧,AS3.0,拖动时有缓动效果,没有用到第三方动画类,内容高度可变化,支持随时改动拖动条的高度,以适应新区域,例如跟随窗口变化,支持鼠标滚轮操作。额外功能,可在外部监听滚动状态。

    AS3 滚动条

    AS3滚动条,可自定义横向还是竖向,带源码

    as3滚动条制作

    实用as3滚动条,flash常用滚动条源码

    as3.0编写的滚动条代码源码

    如果您需要编写一个简单的滚动条 那么这篇文档可能会对你有所帮助!

    as3的滚动条

    用flash的as3写的横向和纵向的滚动条。有源码

    AS3.0 TLFTextField 组件库

    AS3.0 TLFTextField 最新的组件库 以往的有BUG,这个可是最新的哦 package { import fl.controls.UIScrollBar; import fl.text.TLFTextField; import flash.events.Event; import flashx.textLayout....

    AS3 滚动条 源码

    AS3 滚动条 源码 横向和竖向滚动

    ActionScript 3动态文本滚动条模型

    ActionScript 3动态文本滚动条模型 大家一起学习

    开源码 as3 扩展瀑布流功能的DataGrid组件

    滚动条带缓动效果 可在datagrid单元格中插入图片

    sPart v 1.0.3美化版

    sPart UI组件库,一个用AS3.0 编写的轻量级开源 flash UI组件库,它旨在:让用户第一时间、以最快速度搭建一个flash游戏、应用所需要的前端界面。也许它并不如其他同类UI组件那样功能强大,但它的体积小,使用方便,...

    windows 程序设计

    用户可使用滚动条观察那些无法在一个屏幕中装下的信息。某些菜单项目触发对话框,用户可在其中输入额外的信息。几乎在每个大的Windows程序中都有一个用于开启文件的特殊对话框。该对话框在所有这些Windows程序中看...

    vc++ 开发实例源码包

    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 FreeBird2011Dlg.h 主对话框类头文件 MultiGroup.h 多播组类头文件 UserLink.h 用户链表类头文件 ListenSocket.h 侦听接口...

    vfp6.0系统免费下载

    但是,如果在设计时刻 Scrollbars 属性设置为非 0 值,Visual FoxPro 就会允许在运行时刻对 Scrollbars 属性进行读写,因为有代码可调用 SAVEAS() 函数以创建一个带有滚动条的新表单。如果您不需要带滚动条的表单...

    C++MFC教程

    4、窗口句柄:说到消息就不能不说窗口句柄,系统通过窗口句柄来在整个系统中唯一标识一个窗口,发送一个消息时必须指定一个窗口句柄表明该消息由那个窗口接收。而每个窗口都会有自己的窗口过程,所以用户的输入就会...

    C# for CSDN 乱七八糟的看不懂

    数组长度 line0.GetLength(1) 数组赋值 可以从一个已经赋值的数组 array2 向未赋值的同等数组 array1 赋值,用 array1=array2; 这时,array1 就变成和 array2 一样的数组了。 集合 集合的使用 集合可以看成是可以...

    cms后台管理

    1.在myeclipse中新建一个项目jeecms,将服务器中jeecms项目下web-inf文件夹下内容拷到新建项目中 解压缩jeecms-3.0.2-final-src,在src文件夹下会看到有三个压缩文件,如果只想进行普通的二次开发,可以只导入cms这...

    WTL 9.1 5270 Beta 中文 汉化 中英文对照版

    WTL为众多用户界面元素提供支持,包括框架窗口和弹出窗口、MDI、标准和通用控件、通用对话框、属性表单和属性页、GDI对象、用户界面更新、可滚动窗口、分割窗口、命令条等等。WTL类尽量模板化,使用较少实例数据和较...

    WTL 9.1 5270 ReadMe 中文 汉化 中英文对照版 01d

    WTL为众多用户界面元素提供支持,包括框架窗口和弹出窗口、MDI、标准和通用控件、通用对话框、属性表单和属性页、GDI对象、用户界面更新、可滚动窗口、分割窗口、命令条等等。WTL类尽量模板化,使用较少实例数据和较...

Global site tag (gtag.js) - Google Analytics