有人能告诉我为啥这个 JSfiddle 在播放完后会重复第一首歌吗?

Posted

技术标签:

【中文标题】有人能告诉我为啥这个 JSfiddle 在播放完后会重复第一首歌吗?【英文标题】:Can someone tell me why this JSfiddle repeats the first song when finishes playing?有人能告诉我为什么这个 JSfiddle 在播放完后会重复第一首歌吗? 【发布时间】:2021-08-19 10:24:15 【问题描述】:

这是一个超级快速的问题。这是一段按顺序播放歌曲数组的代码。不知何故,当数组完成播放时,它会重复第一首歌曲。知道为什么吗?我要疯了,因为我想不通......

链接中的代码如下:https://jsfiddle.net/wt2joay4/

var song1 = $('#sound-1');
var song2 = $('#sound-2');
var song3 = $('#sound-3');

var audioArray = [song1, song2, song3];
var i=0;
var lastPlayedFile = null;
$(".click").click(function()
  if(lastPlayedFile !== null) 
     lastPlayedFile[1].currentTime = 0;
     lastPlayedFile.trigger('pause'); 
  
  if (i< audioArray.length)
     lastPlayedFile = audioArray[i];
     audioArray[i].trigger('play');
     i++;
 else if (i>=audioArray.length)
     i = 0;
     lastPlayedFile = audioArray[0];
     audioArray[i].trigger('play');
  ;
);

谢谢!

【问题讨论】:

Last if: i=0 TBH 似乎有点落后,因为 i = next 索引播放而不是更明智的 current 播放索引。 @freedomn-m 删除它不会让我继续播放数组,不幸的是:S 再看一遍:它是 0,1,2,0,0,1,2 - 所以第一个在循环播放时会播放两次 - 是这个问题吗? @freedomn-m 正确,不幸的是:( 【参考方案1】:

问题在于i=0。这应该是i=1

i 变量用于指示下一首播放哪首歌,而不是当前索引。

所以在i&lt;audioArray.length 中它播放audioArray[i]然后 播放i++

但在i&gt;=length 中,它播放audioArray[0] 但留下i 指向0,所以播放的下一个 又是0。

解决方法是在重新循环后离开i=1。这可以使用与上述相同的概念:i=0; ...play [i]...; i++; 或只是 i=1

 else if (i>=audioArray.length)
     lastPlayedFile = audioArray[0];
     audioArray[i].trigger('play');
     i = 1;
  ;
);

建议:使用比i 更好的变量名。如果它被命名为nextIndex,那么nextIndex=0 会很清楚(呃)它接下来会播放 0(当它已经播放 0 时)。

替代建议:保持i当前索引并在开始下一个之前增加,例如:

var song1 = $('#sound-1');
var song2 = $('#sound-2');
var song3 = $('#sound-3');

var audioArray = [song1, song2, song3];
var i = -1;
$(".click").click(function() 

  if (i >= 0) 
    audioArray[i].currentTime = 0;
    audioArray[i].trigger('pause');
  

  i++;
  if (i >= audioArray.length)
    i = 0;

  audioArray[i].trigger('play');
);

(并将i 更改为currentIndex,但在上面保留为i 以与原始版本进行比较)

updated fiddle

【讨论】:

以上是关于有人能告诉我为啥这个 JSfiddle 在播放完后会重复第一首歌吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 HTML 按钮播放声音

有人能告诉我为啥这段代码似乎可以工作,但不能……拜托?

有人能告诉我为啥我的加密有效但我的解密无效吗?看下面的图片

如何在点击时播放声音?

有人能告诉我为啥当我的游戏中的相机移动时一切都会振动吗?

开发服务器返回响应错误代码:500 react-native 为啥这个错误谁能告诉我