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();