本JavaScipt教程将让你感受到FLASH给您带来有声世界的无穷魅力
在开始本教程之前
我先介绍一下本教程涉及到的内容
隐藏嵌入的SWF
播放流同步的SWF
从指定的帧上开始流
停止和播放流
检查是否磁道在播放
检查是否播放器准备好
检查SWF转载的百分比
验证SWF是否完全装载好
检查播放器的版本号
设置最小的播放器版本号
清除错误信息等等
好吧
开始我们的教程吧
隐藏嵌入的SWF
FlashSound的JavaScript API往网页插入一个FlashSound对象随同插入还有embedSWF()方法但是在网页中我们为什么不能看到这个对象呢?哦原来是FlashSound隐藏了这个对象在Internet浏览器中FlashSound是这个对象变得透明也就是说你看不到这个对象但实际上它是存在的而在Netscape浏览器中这个对象的颜色被指定为跟网页相同的颜色所以你也看不到它你可以在Netscape浏览器中通过使用bgcolor属性来设置对象的颜色以上两种方法正是隐藏对象的核心所在试一试吧下面我的代码是实现当鼠标移过对象时播放scaleswf文件所以我们这样来创建FlashSound对象
mySoundObjbgcolor = #ff;
mySoundObjembedSWF(scaleswf);
下面的代码可以让你在Netscape浏览器中看到在Play a Scale下面有一个小点它正是我们创建的FlashSound因为此时它的颜色不是与网页的背景色相同看看代码吧
var mySoundObj = new FlashSound();
onmouseover=mySoundObjTGotoAndPlay(/scaleevent start)>
Play a Scale
mySoundObjbgcolor = #ff;
mySoundObjembedSWF(scaleswf);
播放流同步的SWF
Flash文件格式支持四种同步的类型Event(事件)Start(开始)Stop(停止)和Stream(流)事件同步允许你同时播放多个磁道的声音开始同步可以避免并行的磁道播放停止同步作用是停止磁道播放而对于流同步声音包含了声音的帧尺寸样式它可以反复地天衣无缝地播放不象其它真实的流声音格式(比如Real Audio)Flash流文件是在播放的时候装载到浏览器中去的当播放结束的时候这个流声音就全部被装载浏览器的高度缓沖区中所以在接下去的播放是来源与浏览器的告诉缓沖区而不是来源于网页
以下的连接是播放一个流同步它解释了FlashSound的JavaScript API代码如下
var mySoundObj = new FlashSound();
mySoundObjembedSWF(earsonlyswf);
这里值得注意的是Flash声音被设置在Flash编辑器中来自动开始播放
从指定的帧上开始流 FlashSound的JavaScript API支持象CD播放器那样的随机访问磁道中任何帧的能力所以你可以指定任意的帧好来播放你喜欢的声音
如图所示的四个连接是连到一个典型的CD播放器控制面板上第一个连接是回到第一帧开始播放第二个连接是否从第帧处开始播放第三个连接是从第帧处开始播放而第四个连接是暂停所有的播放
(图)
详细的代码如下
var mySoundObj = new FlashSound();
onmouseover=mySoundObjTGotoAndPlay(/)>
从第帧开始播放
onmouseover=mySoundObjTGotoAndPlay(/)>
从第帧开始播放
onmouseover=mySoundObjTGotoAndPlay(/)>
从第帧开始播放;
onmouseover=mySoundObjTStopPlay(/)>
暂停<
mySoundObjautostart = false;
mySoundObjembedSWF(earsonlyswf);
这里我们将autostart(自动开始播放)设置为Flase这个例子很好地说明了我们怎样利用JavaScript来重载Flash行为
停止和播放流
FlashSound的JavaScript API支持一个等价于暂停的方法即TStopPlay()这个TStopPlay()方法有一个参数即timeline(时间线)我们可以使用/(反斜线)来指定主时间线TStopPlay()可以在指定的时间线上停止向前播放而不会重新播放值得指出的是这个TstopPlay()方法只能停止了设置为流同步的声音的播放而不能设置为时间或者开始同步的声音的播放
同样FlashSound的JavaScript API页支持等价于播放的方法即TPlay()这个TPlay()方法也有一个参数也为时间线类似地我们可以使用/来指定主时间线TPlay()可以在被TStopPlay()停止播放的帧处的时间线(传递给TPlay()的参数)上开始播放或者从第一帧开始播放这个TPlay()方法也只能开始播放被设置为流同步的声音也不能开始播放被设置为时间同步或者开始同步的声音
(图)
如图所示的三个连接是连到典型的磁带录音机控制面板上第一个连接是利用TGotoAndPlay()重新播放第二个连接是利用TStopPlay()来暂停播放而第三个连接是利用Tplay来继续播放被暂停在某处的声音详细的代码如下
var mySoundObj = new FlashSound();
重新开始播放
暂停播放
继续播放
mySoundObjautostart = false;
mySoundObjembedSWF(earsonlyswf);
检查是否磁道在播放 FlashSound的JavaScript API可以让你检查磁道是否在播放为了做到这点它为了提供了IsPlaying()方法这个IsPlaying()方法没有任何参数它只是在有磁道在播放的时候才返回True(真)否则就返回False(假)所以你可以利用这个方法来创建一些例子比如你可以在声音磁道没有播放的情况下在另外一个磁道播放声音这个实现起来是很简单的
如图所示的前三个连接是连到典型的磁带录音机控制面板而右边的连接是检查在时间上是否有磁道在播放当鼠标移过它的时候我们就可以获得是否播放的答案了在图中第二行的连接是播放一个scale音乐但是它只能在教程音乐没有播放的时候才播放为了实现这个目的我们来检查教程音乐的IsPlaying()的值是否为False这里教程音乐对象为mySoundObj而scale音乐对象是mySoundObj所以实现以上功能的语句应该为
if (!mySoundObjIsPlaying()) mySoundObjTGotoAndPlay(/scaleevent start)
好吧我们可以试一试我们的这几个连接了首先开始播放我们的教程音乐在停止该该教程音乐以播放scale音乐然后在继续教程音乐这时候你会发觉scale音乐停止了
(图)
具体源代码如下
var mySoundObj = new FlashSound();
var mySoundObj = new FlashSound();
onmouseover=mySoundObjTGotoAndPlay(/)>播放教程音乐
onmouseover=mySoundObjTStopPlay(/)>暂停播放
onmouseover=mySoundObjTPlay(/)>继续播放
onmouseover=alert(mySoundObjIsPlaying(/))>是否播放
onmouseover=if (!mySoundObjIsPlaying()) mySoundObjTGotoAndPlay(/scaleevent start)>播放Scale音乐
mySoundObjautostart = false;
mySoundObjembedSWF(earsonlyswf);
mySoundObjembedSWF(scaleswf);
检查是否播放器准备好
FlashSound的JavaScript API的isPlayerReady()方法在浏览器识别到播放器和JavaScrip对象并且SWF至少被装载一个帧上的时候就返回True(真值)如果不是这样的话就返回FalseFlashSound API是在所有其它API方法调用之前执行这个方法所以你不用担心多次使用它会有什么问题的但是你在调用一个Flash方法的时候你必须使用isPlayerReady()因为Flash方法不是FlashSound的 JaScript API的一部分
如图所示的连接是播放一个Flash流磁道它在FlashSound上播放一段教程音乐我们可以增加两条语句来实现第一条在嵌入教程音乐之前我们打印出isPlayReady()的数值第二条在嵌入教程SWF之后打印出isPlayerReady()的数值这样我们可以看看这两次的区别从打印的结果我们可以发现在嵌入教程音乐之前isPlayReady()的值是False而在嵌入教程音乐之后其值是True
(图)
下面是详细的代码
var mySoundObj = new FlashSound();
onmouseover=mySoundObjTGotoAndPlay(/)>播放教程音乐
onmouseover=mySoundObjTStopPlay(/)>暂停播放
onmouseover=mySoundObjTPlay(/)>继续播放
onmouseover=alert(mySoundObjIsPlaying(/))>是否播放
alert(Before Embedding isPlayerReady() returns +
mySoundObjisPlayerReady());
mySoundObjautostart = false;
mySoundObjembedSWF(earsonlyswf);
alert(After Embedding isPlayerReady() returns +
mySoundObjisPlayerReady());
检查SWF转载的百分比 FlashSound JavaScript API的PercentLoaded()方法返回SWF装载到浏览器的百分比这个数值可以是从到的任意值如果你装载一个SWF(当然包括流同步磁道)到网页的时候这个数值都将小于等于
点击如图所示的连接就可以播放一个Flash流磁道它是一个FlashSound的教程音乐对于上面的代码语句我们也只需要修改两条语句第一条在嵌入教程音乐的之前打印出PercentLoaded()的数值第二条在嵌入教程音乐SWF之后打印这个数值从结果中你可以发现在嵌入教程音乐之前PercentLoaded()的数值为而在嵌入教程音乐完毕之后这个数值为
(图)
以下是具体代码
var mySoundObj = new FlashSound();
onmouseover=mySoundObjTGotoAndPlay(/)>播放教程音乐
onmouseover=mySoundObjTStopPlay(/)>暂停播放
onmouseover=mySoundObjTPlay(/)>继续播放
onmouseover=alert(mySoundObjIsPlaying(/))>是否播放
alert(Before Embedding PercentLoaded() returns +
mySoundObjPercentLoaded());
mySoundObjautostart = false;
mySoundObjembedSWF(earsonlyswf);
alert(After Embedding PercentLoaded() returns +
mySoundObjPercentLoaded());
验证SWF是否完全装载好
FlashSound JavaScript API的Tloaded方法返回SWF是否已经完全装载到浏览器这个数值可以为False或者True当你往网页嵌入你的SWF文件(当然包括流同步磁道)的时候它返回Fasle值只能等到装载完毕的时候才返回True值
点击如图所示的连接就将播放一段Flash流磁道即FlashSound中的教程音乐当然我们对上面的代码要修改两个地方第一在嵌入教程音乐之前打印Tloaded()的数值第二在嵌入教程音乐之后打印Tloaded()的数值此时从结果中你可以发现在嵌入教程音乐之前TLoaded()的数值为False值而在嵌入教程音乐完毕之后这个数值为True值
(图)
具体修改的代码如下
var mySoundObj = new FlashSound();
onmouseover=mySoundObjTGotoAndPlay(/)>播放教程音乐
onmouseover=mySoundObjTStopPlay(/)>暂停播放
onmouseover=mySoundObjTPlay(/)>继续播放
onmouseover=alert(mySoundObjIsPlaying(/))>是否播放
alert(Before Embedding TLoaded() returns +
mySoundObjTLoaded());
mySoundObjautostart = false;
mySoundObjembedSWF(earsonlyswf);
alert(After Embedding TLoaded() returns +
mySoundObjTLoaded());
检查播放器的版本号 随着Flash播放器的飞速发展你可能很想知道你的Flash播放器的版本号是多少值得庆幸的是FlashSound JavaScript API就支持检查播放器的版本号这是FlashSound对象的一个属性为了得到这个数值你需要编写以下的代码语句
FlashSoundplayerVersion
这个属性应该设置为只读虽然你可以指定它的数值但是为播放器版本号指定一个数值久将导致一个错误为了得到播放器的版本号我们不必做任何事情而只需包括FlashSound JavaScript代码即flashsoundjs移动鼠标到如图所示的连接就可以得到播放器的版本号
(图)
以下是具体的代码
onmouseover=alert(FlashSoundplayerVersion)>播放器的版本号
有时候你可能想限制一下你的手稿程序来确定Flash播放器的版本号你可以利用FlashSound对象的setMinPlayer()方法来实现它FlashSound JavaScript API为你提供了许多强大的功能你可以指定一个条代码来执行当现有的播放器的版本号低于播放器的最小版本号的处理
下面让我们来验证一下ifNotMinPlayer()方法是如何工作的因为最高的播放器版本号是所以我们将最小的播放器版本号设置为来测试一下这种方法这个方法ifNotMinPlayer()应该是在setMinPlayer()方法之后被使用的点击如图的连接可以看一下这种新方法的演示
(图)
为了设置最小的播放器版本号为我们可以使用语句setMinPlayer()并调用ifNotMinPlayer()以及带有一个参数的函数downloadRecentPlayer()这个downloadRecentPlayer()函数会提示你下载较新版本的播放器
以下是具体实现的代码
设置最小的播放器版本号 有时候在编写一个独立版本的手稿程序要花费许多时间所以你可能会选择一种高于最小版本号的版本通常你可能会选择最新的播放器版本所以就有这样一个问题为什么我们要处理那些老版本的播放器呢?你可以利用setMinPlayer()方法来设置最小版本号它唯一的一个参数是版本号
下面让我们来验证以下setMinPlayer()是如何工作的因为最好的版本号是我们当我们设置最小的版本号为的时候播放器将不会发出声音
如图所示的三行的连接会向我们展示这所有的一切第一行第一个连接示设置最小的版本号为第二个示设置播放器的最小版本号为这是就会使得播放器不会发出声音你马上可以试一试
(图)
以下是具体代码
var mySoundObj = new FlashSound();
var mySoundObj = new FlashSound();
onmouseover=FlashSoundsetMinPlayer();
alert(播放器最小版本号被设置为)>
设置播放器最小版本号为
onmouseover=FlashSoundsetMinPlayer();
alert(播放器最小版本号被设置为)>
设置播放器最小版本号为
onmouseover=mySoundObjTGotoAndPlay(/)>播放教程音乐
onmouseover=mySoundObjTStopPlay(/)>暂停播放
onmouseover=mySoundObjTPlay(/)>继续播放
onmouseover=alert(mySoundObjIsPlaying(/))>是否播放
onmouseover=if (!mySoundObjIsPlaying()) mySoundObjTGotoAndPlay(/scaleevent start)>播放Scale音乐
mySoundObjautostart = false;
mySoundObjembedSWF(earsonlyswf);
mySoundObjembedSWF(scaleswf);
清除错误信息 清除错误信息在所有的编程语言中都是一个值得讨论的题目通常它是一个令程序员头痛的事情对于一个程序也许你都有这样的感受当你编制程序的时候发现一个错误你一定会兴奋不已或者你检查了多遍程序还是发现不了错误存在的地方同样会令你烦恼因为这是一个很严谨的题目 所以就让你自己去决定了毫无疑问对于一个编程的新手来说错误信息是一个很重要的内容因为你需要根据这个错误信息来调试你的新手稿程序
利用FlashSound JavaScript API你可以选择是否清除错误信息具体是利用FlashSound 对象的muteErrorMsg属性为了保留错误信息你需要将这个属性设置为False如果想在调试阶段还是将它设置为True其实缺省值就是True一旦设置为true错误信息就将被清除
下面的JavaScript代码包含了一个错误因为有一个变量没有被定义
我们可以为这个JavaScript错误选择保留或者清除这个错误信息下面的手稿程序是清除错误信息
如果要保留错误信息那么手稿程序如下
你可以点击如图的两个连接来看这两个文件的演示
(图)
具体实现保留错误信息的代码如下
具体实现清除错误信息的代码如下