case "playvideo": video.controls.play();//controls是WMP的一个对象,里头包含很多控制WMP播放的方法。这是让WMP的视频播放。 break; case "pausevideo": video.controls.pause();//这是WMP的暂停方法; break; case "stopvideo": video.controls.stop();//这是WMP的停止方法; break; case "fullscreen": video.fullscreen=args;//设置WMP是否全屏显示,Flash当时传过去的参数为true,故会全屏显示。这个属性,在下载的音乐播放器里没有,笔者在别的地方找了好久,好不容易在新浪视频里头找到了这一句。 6.2 现在生成一个swf,在网页里测试,你将看到视频区下方的状态栏会随着播放状态的变化而改变了。比如说,你在播放时按了暂停按钮,状态文本会提示已暂停。在整个代码里,就只有video_evtPause函数里头有这一设置。但是点暂停按钮都没有调用这一函数喔。那么,为什么还是会出现“已暂停”这几个字呢?答案很简单,就是你点了按钮后,通过fscommand调用了video.controls.pause,而暂停事件是在WMP暂停时自动触发的,于是便调起了video_evtPause了。 哈哈,是不是觉得这样很好用呢?你不需要再在任何控制暂停的地方设置一下状态文本,你只管控制你的视频就行了,其它东西,事件处理函数会及时为你处理,不需要你再为此而操劳了。 最后,就剩下进度条的制作了,其实原理也跟上面的一样,不过这里涉及一些数学问题和逻辑思维,需要AS和JS很好地配合,而且难度相对上面的功能来说,稍高了点,加上很多人都很关注进度条的做法,笔者打算先好好睡一觉,再比较详细地讲讲进度条的做法。 .1 在AS里追加代码: //format是一个处理时间显示的小函数,因为时间的显示方式是00:00/00:00,如果不进行处理,在对时间数值进行运算之后,显示出来的将是0:0/0:0,不符合要求。 function format(str) { str = "00"+str;//这样一处理,就可以保证分和秒的单元的长度大于2; //str = str.substr(str.length-2, 2);//此时再截取两个,就可以让显示出来的分和秒的单元的长度等于2,但是这样会有一个Bug,就是如果时间长于100分钟的时候,将不能正确显示。所以如果不能保证视频长度小于100分钟的话,最好再处理一下:
len=Math.max(2,str.length-2);//让分钟的单元在长度不到2的时候,补充到2,否则就等于本身的长度 str=str.substr(str.length-len,len);//这一次截取就有保证了。 return str; } function showTime() { video_pos = videopos; video_dur = videodur;//videopos,videodur通过JS传到AS里,单位为秒,跟AS的sound对象不同,那是毫秒 if (isNaN(video_pos)) { video_pos = 0;//时间如果是非数字的话,设为0 } video_posmin = format(Math.floor(video_pos/60)); video_possec = format(Math.floor(video_pos%60));//这两个是获取分和秒数值的代码,相信小学生也明白算法,然后,用刚才定义的format函数把字符单元长度处理成最少两个 if (isNaN(video_dur)) { video_dur = 0; } video_durmin = format(Math.floor(video_dur/60)); video_dursec = format(Math.floor(video_dur%60)); time = video_posmin+":"+video_possec+"/"+video_durmin+":"+video_dursec;//把位置时间和总时间连在一起,显示在time动态文本里 } timeId=setInterval(showTime,200)//周期性更新时间显示
7.2 在JS里给Flash设置变量: function video_showTime(){ player.setVariable("videopos",video.controls.currentPosition) player.setVariable("videodur",video.currentMedia.duration) id=setTimeout(video_showTime,200) } 该函数在点到视频的时候再调用也不晚,故该周期性函数的调用语句追加到initvideo函数里头。 进度条的制作: |