0

我有一个 javascript 函数,它运行良好:

function playMp3(str) {
  ...
}

另一个脚本:

function playMp3wholepage() {
  var dgs=new Array();
  dgs[0] = "/abc.mp3";
  dgs[1] = "/dac.mp3";
  dgs[2] = "/hf.mp3";
  ....
  dgs[28] = "/er23.mp3";
  dgs[29] = "/read/34_15.mp3";
  for (i=0;i<=29;i++){
    ses = dgs[i]
    setTimeout("playMp3(ses);", 2000)
  }
}

我想按照第二个脚本中给出的顺序播放所有声音。但我无法运行第二个脚本,它只播放最后一个声音(dgs [29]),而不是全部。

谢谢

4

3 回答 3

1

当 setTimeout 回调执行时,sec已经是dgs[29],您需要创建另一个函数范围来保存该值。

for (var i=0; i<=dgs.length; i++){
   (function (i) {
       setTimeout(function() {
           playMp3(dgs[i]);
       }, 2000 * i);
   }(i));
}
于 2012-09-13T03:18:34.477 回答
0

我猜正在发生的事情是你的循环完成得如此之快,以至于所有的调用playMp3基本上都是一次被调用的。但是,最后一次调用setTimeout会设置最后播放的声音,这就是你听到的所有声音的原因。

此外,使用长度或您的数组,并使您的代码灵活:

for(var i=0; i<dgs.length; i++) {      
}
于 2012-09-13T03:16:55.250 回答
0

这是关于关闭的事情。你可以在这里了解更多。

function playMp3wholepage() {
   var dgs=new Array();
   dgs[0] = "/abc.mp3";
   dgs[1] = "/dac.mp3";
   dgs[2] = "/hf.mp3";
   for (i=0;i<dgs.length;i++){
       ses = dgs[i];
       (function(mp3) {
           setTimeout(function() {
               playMp3(mp3);
           }, 2000);
       })(ses);
   }
}
于 2012-09-13T03:21:57.837 回答