as+js,打造页面flash播放控制器 |
| 作者:佚名 来源:闪吧 作者: xiankevin 更新:2007-1-13 20:48:34 错误报告 我要投稿 |
第一次有这个勇气做个教程出来,也许并不成熟,但希望各位能跟我分享~~~:) 这个flash播放控制的页面上其他的内容这里就不考虑了。 假设只有一个要被控制的flash动画和一个起控制作用的control.swf 首先你要准备一个flash动画。就是要被控制播放的那个 但要注明,如果这个动画是你自己做的,那一切都无所谓 但如果是类似闪吧性质的,要控制他人的flash播放的话,那你得确定这个flash不是那种单帧mc的 就是说整个动画应该是在主时间线上进行的,不能是只有一个mc,而所有的动画都在这个mc中,那样这个mc的实例名可能无法得知,所以不方便我们的控制。 好了准备工作完了,接下来开始我们的播放控制器的制作 用flash画出这些图标估计没什么难度吧?这里略去了,但要明确,需要几个控制按钮,我这里仅用了3个,play,pause,stop,以及一个带滑块的进度条。
首先说整个as的思路: 这个播放控制的原理其实利是用叶面中的js 控制用的flash用fscommand跟js交互,给它发送指令,被控制flash则接收js给它的信息,实现播放 ,停止,以及跳转。 复习一下fscommand的用法: fscommand("command","parameters"); 这里 command是一个字符串,parameters是一个变量 分别表示发送的命令和一个变量 在后面我们会看到他们的用处 play,pause,stop三个按钮很简单,没什么说的 main.playbut.onRelease = function() { fscommand("play", "kevin"); }; main.pausebut.onRelease = function() { fscommand("pause", "kevin"); }; main.stopbut.onRelease = function() { fscommand("stop", "kevin"); }; 这里"kevin"这个字符串没有任何用处,除了带给自己一点小小的成就感~~:) 因为我的所有的as都是写在主时间线上的,所以整个都是一个mc,名字叫main 进度条这里就稍微麻烦一点了 我嵌套了好几重mc :( 整个进度条是一个mc,名字是line 里面有另外两个组件:bar跟timeline分别是滑块跟时间线 因为bar的宽度是30,timeline的宽度是250,所以为了今后的方便我在这里把他们的_x都设在-15 这样bar的正中就是0了 他的滑动范围是0到250 在主场景上写下as main.line.bar.onPress = function() { _root.onEnterFrame = undefined; this.startDrag(false, 0, 0, 250, 0); fscommand("pause", "kevin"); };//设置鼠标拖动,并且当按下鼠标的时候要保证被控制的flash在这时是暂停的,这个问题我们稍后再提到 main.line.bar.onRelease = function() { this.stopDrag(); framejump(); };//鼠标左键松开时,滑块停止拖动,并调用控制帧跳转的framejump()函数 main.line.bar.onReleaseOutside = line.bar.onRelease;//这是为了避免一些不必要的麻烦出现~~ main.line.timeline.onPress = function() { _root.onEnterFrame = undefined; main.line.bar._x = this._xmouse; framejump(); };//这是达到一个直接在timeline上点击就控制进度的效果,跟一般的mp3播放器之类的一样 //当在timeline上点击,设置bar的x坐标为这时鼠标的x坐标,并调用framejump()函数控制帧跳转 现在,整个control的结构和方法你应该已经大致清楚了吧? 在上面那些as的前面应该再加上这些 var totalframes; var currentframe;//设置了两个变量,分别为flash总帧数和当前帧数 main.line.timeline.useHandCursor = false; getframe = function () { fscommand("totalframes", "kevin"); fscommand("currentframe", "kevin"); main.line.bar._x = currentframe/totalframes*250; };//定义了一个得到当前帧的函数,并设置bar的位置 framejump = function () { location = main.line.bar._x/250; targetframe = Math.round(location*totalframes); fscommand("jump", targetframe); _root.onEnterFrame = getframe; };//定义了一个控制帧跳转的函数,按照bar在timeline上的位置来确定跳转的目标帧号,并将目标帧号发送给js _root.onEnterFrame = getframe; //时时获得flash的当前帧数,并设置bar的移动表示进度。这里就要回答前面main.line.bar.onPress里面的要设置flash在这时暂停的原因了。在flash播放的同时,会不停的为bar设置新的位置,使它移动,但如果在鼠标拖动bar的时候,flash仍继续播放,那么结果可想而知。还有这也就是为什么在设置进度条控制的时候总要加一个_root.onEnterFrame=undefined;了 最后再把完整的as贴上吧 var totalframes; var currentframe; main.line.timeline.useHandCursor = false; getframe = function () { fscommand("totalframes", "kevin"); fscommand("currentframe", "kevin"); main.line.bar._x = currentframe/totalframes*250; }; framejump = function () { location = main.line.bar._x/250; targetframe = Math.round(location*totalframes); fscommand("jump", targetframe); _root.onEnterFrame = getframe; }; _root.onEnterFrame = getframe; //init--------------------------------------------------------------------------------------------- main.playbut.onRelease = function() { fscommand("play", "kevin"); }; main.pausebut.onRelease = function() { fscommand("pause", "kevin"); }; main.stopbut.onRelease = function() { fscommand("stop", "kevin"); }; //controlbutton---------------------------------------------------------------------------------------- main.line.bar.onPress = function() { _root.onEnterFrame = undefined; this.startDrag(false, 0, 0, 250, 0); fscommand("pause", "kevin"); }; main.line.bar.onRelease = function() { this.stopDrag(); framejump(); }; main.line.bar.onReleaseOutside = line.bar.onRelease; main.line.timeline.onPress = function() { _root.onEnterFrame = undefined; main.line.bar._x = this._xmouse; framejump(); }; 发布这个flash为html格式,选择flash with fscommand
用dw编辑一下这个html文档 在合适的地方插入一个flash动画
 为这个flash和播放控制的flash都分别添加id名
 下面是js的内容: 因为本身导出的时候选择了 flash with fscommand 所以这时候已经是有js的框架了 你可以找到这个地方 // // Place your code here... // 写入如下代码: function control_DoFSCommand(command, args) { var controlObj = InternetExplorer ? control : document.control; var movie = InternetExplorer ?mymovie : document.mymovie; //注意这两句,其中有些东西是要调整的!!! if (command == "totalframes") { var totalframes = movie.TotalFrames; controlObj.SetVariable("/:totalframes",totalframes); } //这是得到flash的总针数,并将这个值传给播放控制的flash---control if (command == "currentframe") { var currentframe = movie.TCurrentFrame("/"); controlObj.SetVariable("/:currentframe",currentframe); } //这是得到flash的当前针号,并将这个值传给播放控制的flash---control if(command=="play"){ movie.Play(); } if(command=="pause"){ movie.StopPlay(); } if(command=="stop"){ movie.GotoFrame(0); } //相当于as中的gotoAndStop(frame),但这里第一针的值是0!! if(command=="jump"){ movie.GotoFrame(args); var currentframe=args; movie.Play(); } //跳转到某一针并继续播放 OK,现在大功告成!!! 只要打开这个control.html观看flash吧,用下面的控制器可以达到播放控制的作用了~~ 你再也不用为 错过某一个精彩的画面而重新等待了,我想看哪里就看哪里!!就象用播放器看电影~~~ 好爽~~~ 如果你需要做一个类似闪吧的flash播放页面,把它加进去,不是为网页的浏览者提供了一个很大的方便么~~ 这也就是我做这个的目的.嘻嘻~~~ 点击下载源文件 http://www.flash8.net/bbs/UploadFile/200392314122792295.rar
|
|
| 文章录入:skyuu 责任编辑:skyuu |
|
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |