- 在线时间
- 1529 小时
- 专家
- 0
- UID
- 145379
- 注册时间
- 2004-12-1
- 帖子
- 7398
- 精华
- 4
- 积分
- 33326
- 居住地
- 广东省 广州市
- 离线
- 13 天
专长: ASP ,Flash Media Server,ActionScript
- 帖子
- 7398
- 体力
- 32121
- 威望
- 241
- 居住地
- 广东省 广州市
|
发表于 2006-9-20 01:54:10
|显示全部楼层
8.4 接下来就做拖动了。
拖动滑块,首先需要限制滑块只能横向在initx到initx+maxLength这一范围内移动,纵向不能改变。
然后,当释放滑块的时候,我们要让视频移动到相应的位置pos,根据进度条的原理,此时的pos依然满足:
ball._x=initx+pos/dur*L
于是,可以解得pos=(ball._x-initx)/L*dur
然后,再把这一数值以fscommand传给HTML,但是,由于dur其实是视频的总时间,属于WMP的信息,直接在Flash里传出去似乎不是很好(这纯粹是个人的想法),于是,笔者把上面的式子改了一下:
pos/dur=(ball._x-initx)/L
然后,pos/dur用一变量percent代替,传给HTML,再让JS处理。
于是,现在可以在ball里头的按钮添加代码:
on (press) {
startDrag(this, false, _parent.initx, _parent.inity, _parent.initx+_parent.maxLength, _parent.inity);
}
on (release, releaseOutside) {
fscommand("setvideopercent", (_x-_parent.initx)/_parent.maxLength);//这里需要让HTML接收位置时间,然后通过JS控制视频播放
stopDrag();
}
此时在网页里测试影片,你会发现,视频播放的时候,滑块根本不听你的话,它老是跟着播放进度走。
......怎么办呢?
此时,我们必须想办法,在按下按钮的时候,禁用
ball._x = initx+_parent.video_pos/_parent.video_dur*maxLength;
这么一句。这里,最好的办法,个人觉得是去掉onEnterFrame事件,然后在释放滑块以后,重新声明。
不过,笔者已经形成了不太好的习惯,喜欢通过一个布尔变量来判断是否执行。定义一个dragging变量,如果为true,则不允许滑块跟着视频走。
那么,progressBar第一帧的代码就改成:
var initx:Number = ball._x;
var inity:Number = ball._y;
var maxLength:Number = 301;
dragging = false;
this.onEnterFrame = function() {
if (!dragging) {
ball._x = initx+_parent.video_pos/_parent.video_dur*maxLength;
}
};
ball里头的按钮代码则改为:
on (press) {
_parent.dragging = true;//按下后,滑块将不跟视频走了,任你在进度条长度范围内拖动
startDrag(this, false, _parent.initx, _parent.inity, _parent.initx+_parent.maxLength, _parent.inity);
}
on (release, releaseOutside) {
fscommand("setvideopercent", (_x-_parent.initx)/_parent.maxLength);
stopDrag();
_parent.dragging=false;//释放滑块后,滑块可以跟视频走了
}
生成SWF文件。 |
|