| 首先感谢金鹰教程的老师,我是在聆听AS2视频影片剪辑播放控制条和AS3声音下载播放控制进度条的基础上经多次试验才总结出AS3视频影片剪辑播放控制条的脚本,与AS2的也差不大,先新建一个叫滑块(hk_mc)的影片剪辑,再新建一个叫滑道 (hd_mc)的影片剪辑,把滑块放在滑道的左端,用对齐面板对齐,如果你想把这个控制条做成个影片剪辑,那么把滑块和滑道放在这个影片剪辑里,代码如下:

var shang=hk_mc.y;
//声明 上=滑块的Y坐标
var zuo=hd_mc.x;
//声明 左=滑道的X坐标
var xia=0;
//声明 下=0
var you=hd_mc.width-hk_mc.width;
//声明 右=滑道的宽-滑块的宽
var fk:Rectangle=new Rectangle(zuo,shang,you,xia);
//声明 方块的位置是一个新的位置:左上右下
var hdzc:Number = hd_mc.width-hk_mc.width;
//声明 实际滑道的总长的数值= 滑道的宽-滑块的宽
var td:Boolean = true;
//声明 加一个布尔运算 拖动的布尔运算为真
hk_mc.buttonMode=true;
//滑块的按钮显示模式为真,即显示为手型
hk_mc.addEventListener(MouseEvent.MOUSE_DOWN,hkax);
//添加鼠标在滑块按下hkax的侦听事件
hk_mc.addEventListener(MouseEvent.MOUSE_UP, hksk);
//添加鼠标在滑块松开hksk的侦听事件
stage.addEventListener(Event.ENTER_FRAME,cfzx);
//添加舞台影片剪辑进入帧(重复执行cfzx)的侦听事件
function hkax(event:MouseEvent):void {
td = false;
//拖动的布尔运算为假
hk_mc.startDrag(false,fk);
//光标不锁定中心,滑块开始在FK范围内拖动
stage.addEventListener(MouseEvent.MOUSE_UP,hklk);
//添加鼠标在舞台松开(离开滑块hklk)的侦听事件
stage.removeEventListener(MouseEvent.MOUSE_DOWN,MainTimeline(stage.getChildAt(0)).lineBegin);
//清除鼠标按下根目录舞台开始画线lineBegin函数的侦听事件
MainTimeline(stage.getChildAt(0)).lines.graphics.clear();
//清除画的线
}
function hksk(event:MouseEvent):void {
MainTimeline(stage.getChildAt(0)).jiewen.gotoAndPlay(int(MainTimeline(stage.getChildAt(0)).jiewen.totalFrames*(hk_mc.x-hd_mc.x)/(hd_mc.width-hk_mc.width)));
//根目录MainTimeline(stage.getChildAt(0))的jiewen跳转到jiewen的总帧数*(滑块的X坐标-滑道的X坐标)/(滑道的宽-滑块的宽)这个百分比中播放,int是取整数
td = true;
//拖动的布尔运算为真
hk_mc.stopDrag();
//滑块停止拖动
stage.addEventListener(MouseEvent.MOUSE_DOWN,MainTimeline(stage.getChildAt(0)).lineBegin);
//添加鼠标按下根目录舞台开始画线lineBegin函数的侦听事件
MainTimeline(stage.getChildAt(0)).lines.graphics.clear();
//清除画的线
}
function hklk(event:MouseEvent):void {
MainTimeline(stage.getChildAt(0)).jiewen.gotoAndPlay(int(MainTimeline(stage.getChildAt(0)).jiewen.totalFrames*(hk_mc.x-hd_mc.x)/(hd_mc.width-hk_mc.width)));
//根目录MainTimeline(stage.getChildAt(0))的jiewen跳转到jiewen的总帧数*(滑块的X坐标-滑道的X坐标)/(滑道的宽-滑块的宽)这个百分比中播放,int是取整数
td = true;
//拖动的布尔运算为真
hk_mc.stopDrag();
//滑块停止拖动
stage.addEventListener(MouseEvent.MOUSE_DOWN,MainTimeline(stage.getChildAt(0)).lineBegin);
//添加鼠标按下根目录舞台开始画线lineBegin函数的侦听事件
stage.removeEventListener(MouseEvent.MOUSE_UP,hklk);
//清除鼠标在舞台松开(离开滑块hklk)的侦听事件
MainTimeline(stage.getChildAt(0)).lines.graphics.clear();
//清除画的线
}
function cfzx(event:Event) {
if (td) {
//假如td为真
hk_mc.x = hd_mc.x+(hdzc)*MainTimeline(stage.getChildAt(0)).jiewen.currentFrame/MainTimeline(stage.getChildAt(0)).jiewen.totalFrames;
//滑块的X坐标=滑道的X坐标+滑道实际总长*根目录下的影片剪辑jiewen的当前帧数/根目录下的影片剪辑jiewen的总帧数
} else {
//否则
MainTimeline(stage.getChildAt(0)).jiewen.gotoAndPlay(int(MainTimeline(stage.getChildAt(0)).jiewen.totalFrames*(hk_mc.x-hd_mc.x)/hdzc));
//根目录下的影片剪辑jiewen跳转到根目录下的影片剪辑jiewen的总帧数*(滑块的X坐标-滑道的X坐标)/滑道总长
}
}
如果你不想做成一个影片剪辑,只想把滑块滑道拖放在舞台上直接控制视频播放,那么把上面的代码中的MainTimeline(stage.getChildAt(0)).去掉。
如果还有画线的程序, MainTimeline(stage.getChildAt(0)).lines.graphics.clear();
正好清除画的线
在这个播放控制条中用了类似于AS2的onReleaseOutside,即离开后释放,这个在AS3中已经没有了,那么怎么做它呢?请看其中的这几处代码:
hk_mc.addEventListener(MouseEvent.MOUSE_DOWN,hkax);
//添加鼠标在滑块按下hkax的侦听事件
......
stage.addEventListener(MouseEvent.MOUSE_UP,hklk);
//添加鼠标在舞台松开(离开滑块hklk)的侦听事件
......
function hkax(event:MouseEvent):void {
......
stage.addEventListener(MouseEvent.MOUSE_UP,hklk);
//再次添加鼠标在舞台松开(离开滑块hklk)的侦听事件
......
function hklk(event:MouseEvent):void {
......
stage.removeEventListener(MouseEvent.MOUSE_UP,hklk);
//清除鼠标在舞台松开(离开滑块hklk)的侦听事件
在滑块添加滑块松开hksk的侦听事件,在舞台上添加鼠标松开(离开滑块hklk)的侦听事件,当在舞台上添加鼠标松开时,用removeEventListener 卸载了hklk 事件,这样,在舞台是单击鼠标时就不会影响其它事件,而当再次在滑块点击拖动时,又再次添加了鼠标在舞台松开(离开滑块hklk)的侦听事件,从而模拟了onReleaseOutside事件。在AS3中,removeEventListener 是值得学习,好好研究的。 |