本页面由 Flash 保存计划 从 Internet Archive 存档还原 · 快照 2004-12-09 · 原址 http://www2.flash8.net/teach/950.htm ← Flash 保存计划
 
as+js,打造页面flash播放控制器
作者:xiankevin  来源:闪吧
时间: 2004年4月9  类型: 原创  
收藏 发送 评论 <%=votevote%>打印 字体选择:   

第一次有这个勇气做个教程出来,也许并不成熟,但希望各位能跟我分享~~~:) 这个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

责任编辑:uufeng
上一篇: 把ASP编写成DLL 下一篇: 旋转的花朵
 
flash影片web播放控制器制作祥解