Javascript HTML5音频重新开始
拥有 我在需要时播放咔哒声Javascript HTML5音频重新开始,javascript,jquery,html,audio,browser,Javascript,Jquery,Html,Audio,Browser,拥有 我在需要时播放咔哒声 var audio = new Audio("click.ogg") 但是,有时用户速度太快,浏览器根本无法播放音频(可能是在仍播放以前的play请求时)。此问题是否与预加载有关 如何强制浏览器停止播放并重新开始?HTML5音频组件中没有停止,只有暂停,对吗?这里可以使用什么变通方法 更新-附加说明: 我有多个复选框,比如带有touchend事件的div元素。触发此类事件时,元素会发生视觉变化,播放声音并相应设置内部变量。如果用户慢慢地点击这些元素,一切都会很好地
var audio = new Audio("click.ogg")
但是,有时用户速度太快,浏览器根本无法播放音频(可能是在仍播放以前的play
请求时)。此问题是否与预加载有关
如何强制浏览器停止播放并重新开始?HTML5音频组件中没有停止
,只有暂停
,对吗?这里可以使用什么变通方法
更新-附加说明:
我有多个复选框,比如带有
touchend
事件的div
元素。触发此类事件时,元素会发生视觉变化,播放声音并相应设置内部变量。如果用户慢慢地点击这些元素,一切都会很好地工作。如果快速点击,声音通常会被完全跳过…这是我一直在使用的代码,它对我有效:
audio.play()
我发现如何快速播放短声音(如此之快,以至于第二个声音在第一个结束之前开始)的唯一方法是实际加载5或10,如果您必须再次播放,但已经在播放,只需转到下一个不播放的声音:
if(audioSupport.duration > 0 && !audioSupport.paused){
//already playing
audioSupport.pause();
audioSupport.currentTime = 0;
audioSupport.play();
}else{
//not playing
audioSupport.play();
}
var-soundEls=[]//加载10个音频,而不是1个
对于(变量i=0;i 0&&!soundEl.暂停){
//已播放,切换到下一个soundEl
soundElIndex++;
如果(!soundEls[soundElIndex])soundElIndex=0;
soundEls[soundElIndex].play();
}否则{
//不玩
soundEl.play();
}
}};
这样做的结果是你可以在自己身上播放同样的声音
但可能不是正确的方法。您可以尝试以下代码:
var soundEls = [];//load 10 audios instead of 1
for(var i=0;i<10;i++){
var soundEl = document.createElement('audio');
soundEl.src = url;
soundEl.preload = 'auto';
$(this._soundEl).append(soundEl);
soundEls.push(soundEl);
}
var soundElIndex = 0;
return {play:function(){
var soundEl = soundEls[soundElIndex];
if(soundEl.duration > 0 && !soundEl.paused){
//already playing, switch to next soundEl
soundElIndex++;
if(!soundEls[soundElIndex]) soundElIndex=0;
soundEls[soundElIndex].play();
}else{
//not playing
soundEl.play();
}
}};
看起来这是最简单的解决方案。我注意到在Firefox上,一次又一次地快速播放声音(比如短滴答声)会经常跳过节拍。我得到的最好的解决方案就是简单地调用
cloneNode
,并以这种方式播放每个声音。它并不完美(与Chrome相比,Chrome听起来完美无瑕):
var audio=document.getElementById('myaudio');
setInterval(函数(){
audio.cloneNode().play();
}, 100);
我认为甚至没有必要检查它是否已经在播放。就这么做吧。。。audioSupport.pause();audioSupport.currentTime=0;audioSupport.play();我也不认为有必要停下来。这是一个很好的解决方案。比预期答案更快。Ty@MaciejBukowski铬71。
audio.currentTime = 0;
audio.play();