flash AS3.0实现进度条与播放暂停按钮的同步

来源:互联网 发布:淘宝田径精英 编辑:程序博客网 时间:2024/05/17 23:40

       前面我分别介绍过如何实现播放和暂停按钮以及进度条的实现,不过一般情况下需要把两者结合起来使用,因此今天在这里我就来介绍实现两者统一的方法。

      以下的代码实现了通常所见的进度条和播放暂停按钮同步响应的功能,在拖拉进度条滑块时主场景不播放,在进度条上点击时则继续播放,与此同时播放暂停按钮会根据目前视频的状况表现出该有的一面。

import flash.events.MouseEvent;
import fl.motion.MotionEvent;


//progressBar是进度条的名称,slider是滑块的名称
//滑块的状态
var drag:Boolean= false;
//动态获取滑块的x坐标
var sliderX:Number;
//滑块的滑动范围,前面两个参数分别是滑块和进度条重合的x和y坐标,
//后面两个参数是横向偏移量和纵向偏移量
var rect:Rectangle = new Rectangle(0, -27.25,progressBar.width, 0);
//ENTER_FRAME事件,即时更新滑块的位置
addEventListener(Event.ENTER_FRAME,EnterFrameHandler);
function EnterFrameHandler(e:Event):void
{
        //自然播放的结果
        if (drag == false) 
{
//获取主场景中的currentFrame和totalFrames,并算出滑块的x坐标
        sliderX = root["currentFm"]/(root["totalFm"]/progressBar.width);
        slider.x = sliderX;
}
        //认为滑块拖动之后的结果
if (drag == true) 
{
        MovieClip(root).gotoAndStop(Math.floor((Math.abs(slider.x)+1)*(root["totalFm"]/progressBar.width)));
        }
if (slider.x<=0 && drag == true) 
{
        slider.x = 0;
        MovieClip(root).gotoAndStop(1);
        }
        if (slider.x>=progressBar.width) 
{
        drag = true;
}
   //安上进度条后从最后一帧跳到第一帧,这边1673是我的flash最后一帧的前一帧方便侦听,
   //需要的自行更改
  
if(root["currentFm"]==1673)  
MovieClip(root).gotoAndPlay(1);
}










 
//注册事件侦听
//鼠标左键在滑块上按下
//鼠标左键在滑块上抬起
//鼠标左键在进度条上按下
//鼠标左键在进度条上抬起
slider.addEventListener(MouseEvent.MOUSE_DOWN,slider_DOWN);    
slider.addEventListener(MouseEvent.MOUSE_UP,slider_UP);        
progressBar.addEventListener(MouseEvent.MOUSE_DOWN,progressBar_DOWN);  
progressBar.addEventListener(MouseEvent.MOUSE_UP,progressBar_UP);     
//事件侦听函数
function slider_DOWN(evt:MouseEvent):void{
    evt.target.startDrag(false,rect);     //按住滑块,滑块随鼠标拖动
    drag=true;
    stage.addEventListener(MouseEvent.MOUSE_UP, slider_UP);  //在舞台上添加一个监听器
//防止出现在滑块上按下在其他位置抬起的情况
    }
     
function slider_UP(evt:MouseEvent):void{
    stage.removeEventListener(MouseEvent.MOUSE_UP, slider_UP); //移除在舞台上抬起左键时的监听器
    stopDrag();
    drag=false;
    MovieClip(root).stop();
    MovieClip(root).a_btn.visible=true;
    MovieClip(root).b_btn.visible=false;//鼠标左键抬起后主场景继续播放,需要暂停的写stop()
    }
 
function progressBar_DOWN(evt:MouseEvent):void{
    drag=true;
    slider.x=mouseX;
    stage.addEventListener(MouseEvent.MOUSE_UP, progressBar_UP);
    }
function progressBar_UP(evt:MouseEvent):void{
        stage.removeEventListener(MouseEvent.MOUSE_UP,  progressBar_UP);
drag=false;
        MovieClip(root).play();
MovieClip(root).a_btn.visible=false;//这边就是播放暂停按钮随播放状态的变化而变化的代码
MovieClip(root).b_btn.visible=true;
    }


另外在主场景第一帧加入以下代码即构成完整的同步功能

import flash.events.MouseEvent;


stop();


var totalFm:Number=totalFrames;
var currentFm:Number;
 
addEventListener(Event.ENTER_FRAME,reflash);
 
function reflash(e:Event):void{
    currentFm=currentFrame;
}


阅读全文
0 0