2011-01-11 47 views
3

这是的情况:可能通过Javascript来控制SWF?

客户想要一个循环SWF文件暂停两秒钟,然后再开始播放一遍(这是一个很好的徽标生成动画,但徽标不留在屏幕上非常只是因为电影重复,所以用户不能长时间看到这个标志,这是无关的,但是很好的背景故事。)

他们给我提供了一个SWF文件,但不是FLA。当我要求FLA时,我被告知包含FLA的硬盘驱动器崩溃,无法恢复。所以,这几乎是一个死胡同。

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

  1. 有SWF环
  2. 暂停电影两秒钟就重新启动

你怎么看之前?

+0

啊,不能真正做到这一点。 Flash电影需要JavaScript的钩子来告诉它执行操作。反编译你最好的选择。 – JohnO 2011-01-11 16:46:46

回答

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

+0

真是个好主意。我甚至没有考虑创建另一个加载该文件的Flash文件。唯一的缺点是存在加载事件,因此您必须提供反馈,用户必须等待。好的解决方案。 – lewiguez 2011-01-12 16:45:51

+0

另外,应该注意的是,有人在工作时建议导入After Effects并以这种方式输出SWF。这实际上工作得很好。 – lewiguez 2011-01-12 16:46:38

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/