可以通过Javascript控制SWF吗?

时间:2011-01-11 14:39:52

标签: javascript flash actionscript

情况如下:

客户端希望循环SWF文件暂停两秒钟才能再次开始播放(这是徽标上的一个很好的构建动画,但徽标不会长时间停留在屏幕上,因为电影重复了这么多用户不能长时间看到这个标志。这是无关紧要的,但很好的背景故事。)

他们为我提供了一个SWF文件,但不是FLA。当我要求FLA时,我被告知包含FLA的硬盘崩溃并且无法检索。所以,这几乎是一个死胡同。

在我尝试去编译SWF和所有有趣的东西之前,我想知道是否有任何方法可以用HTML和Javascript完成。那就是:

  1. 拥有SWF循环
  2. 在重新启动电影之前暂停电影两秒钟
  3. 您怎么看?

3 个答案:

答案 0 :(得分:5)

使用javascript不容易实现,但如果将swf加载到另一个swf中则非常容易。然后,您可以访问原始swf的主时间轴,并且您可以控制它。如果你想控制一部名为targetMovie.swf的电影,你可以这样做:

var loader:Loader = new Loader();
loader.load(new URLRequest("targetMovie.swf"));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
addChild(loader);

var logoMovie:MovieClip;
function onComplete(evt:Event):void{
    logoMovie = MovieClip(loader.content);
    // call pauseMovie at end of timeline
    logoMovie.addFrameScript(logoMovie.totalFrames-1, pauseMovie);
}
function pauseMovie():void{
    logoMovie.stop();
    // delay for two seconds;
    setTimeout(function(){
      logoMovie.play();   
        }, 2000);
}

我在这里上传了一些源文件here

答案 1 :(得分:2)

你可以使用swfObject在javascript中完全模拟这个。您需要计算动画的时间,添加两秒,然后将其设置为脚本重新启动之前的时间。下面是homestarrunner介绍的一个实例:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
        <script type="text/javascript" src="http://swfobject.googlecode.com/svn-history/r409/trunk/swfobject/swfobject.js"></script>

        <script type="text/javascript">
            $(document).ready(function(){
              startSwf()
            })

            var restartTime = 24500 //in milliseconds
            function stopSwf(){
              swfobject.removeSWF("swfLoop");
              startSwf();
            }

            function startSwf() {
              $("body").append("<div id='swfLoop'></div>");
              swfobject.createSWF({data:"http://homestarrunner.com/newintro.swf", width:400, height:300}, null, "swfLoop");
              setTimeout('stopSwf()', restartTime);
            }
        </script>
    </head>
    <body></body>
</html>

在此处插入:http://htmledit.squarefree.com/

答案 2 :(得分:1)