Java 脚本 - 当尝试按顺序一个接一个地播放音频时(通过 for 循环),一次播放所有音频
Posted
技术标签:
【中文标题】Java 脚本 - 当尝试按顺序一个接一个地播放音频时(通过 for 循环),一次播放所有音频【英文标题】:Java script -All audio plays at once when attempting to play audio one by one in a sequence (through a for loop) 【发布时间】:2017-06-22 18:28:28 【问题描述】:这是我的项目https://codepen.io/RajTheSHow/pen/vZZPqZ的代码笔链接 当您按下错误的按钮时,它应该播放序列(按顺序按音频和按钮)。但是实际发生的是,当您按下错误的按钮时,它会播放所有音频并立即更改颜色并且不执行睡眠功能是什么。你可以在笔中看到问题。
按下错误按钮时运行序列的函数如下 cal 是存储顺序的位置。
//plays the sequence
function callBut()
onr=0;
for(i=0;i<cal.length;i++)
// or eval ("s"+cal[i])
window["s"+cal[i]].play();
// set the but# to Clicked Color Ccol# then after 1 sec go back to normal color
$("[but="+cal[i]+"]").css("background",window["Ccol"+cal[i]])
sleep(500).then(() =>
// set the button# to Standard color Scol#
$("[but="+cal[i]+"]").css("background",window["Scol"+cal[i]])
);
【问题讨论】:
寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及重现它所需的最短代码在问题本身。没有明确的问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example。 这个问题可能会对你有所帮助***.com/questions/21471116/… 【参考方案1】:你期待什么?循环不会等待音频完成。最好使用递归来播放下一首歌曲。
let arr = cal.map(element => window[`s$element`]); // asuming 'cal' is something significant
let index = 0;
playAudio(arr[index]);
function playAudio(audio)
if (!audio || !(audio instanceof Audio)) return;
audio.addEventListener('ended', function()
index++;
playAudio(arr[index]);
)
audio.play();
【讨论】:
【参考方案2】:这是正确和预期的行为。 您想要实现的需要等待结束事件,然后才在下一个剪辑上调用播放。 这可以通过正确处理您可以在线查找的音频事件并“链接”它们一次播放一个来实现,就像这样:
var nextSound;
function playNext()
var audio;
if (nextSound >= cal.length)
return;
audio = $(window["s"+cal[nextSound++]]);
audio.on("ended", playNext);
audio[0].play();
nextSound = 0;
playNext();
【讨论】:
以上是关于Java 脚本 - 当尝试按顺序一个接一个地播放音频时(通过 for 循环),一次播放所有音频的主要内容,如果未能解决你的问题,请参考以下文章
Android:如何流畅地按顺序播放视频而不会出现故障和延迟?
使用 JavaScript 按顺序播放 MP3 文件,无需 HTML5 音频