Javascript::audio.currentTime仅在发出警报后正确更新

Javascript::audio.currentTime仅在发出警报后正确更新,javascript,audio,alert,innerhtml,isset,Javascript,Audio,Alert,Innerhtml,Isset,我想我在JavaScript音频API上发现了一个bug 我的代码是这样工作的: var audio=new Audio(); var lastPause; var myPlayer=document.querySelector('#player>.button.hand'); var playerStatus=("textContent" in document)?"textContent":"innerText"; myPlayer.addEventListener ( '

我想我在JavaScript音频API上发现了一个bug

我的代码是这样工作的:

var audio=new Audio();
var lastPause;

var myPlayer=document.querySelector('#player>.button.hand');
var playerStatus=("textContent" in document)?"textContent":"innerText";

myPlayer.addEventListener
(
    'click',
    function()
    {

        if(audio.paused)
        {

            audio.src="Nadav Guedj - Golden Boy (Eurovision 2015 - Israel - Karaoke).mp3";
            myPlayer.innerHTML="►";           

            if(lastPause)
            {
                alert(lastPause); //If I remove this line it's not working when lastPause is defined!
                audio.currentTime=lastPause;
            }

            audio.play();

        }
        else
        {
            myPlayer.innerHTML="||";
            lastPause=audio.currentTime;
            audio.pause();
        }

    }

);
但是


如果我删除或注释警告行
alert(lastpaise)定义了
lastpaise
或音频不足时音频卡滞。。。用户第二次按play(暂停后)。

我假设此问题与我的答案相关,也适用于此

重复设置
audio.src
是您的问题。有两种方法可以解决此问题:

  • 去掉
    audio.src
    行,还可以删除一堆其他冗余代码
  • 当您使用alert时,它工作的原因是,当alert被触发时,接下来的几行不会执行,直到您解除它,在这宝贵的几秒钟/毫秒内,源已更改的音频元素有足够的时间加载新的元数据,只有这样才能设置当前时间。因此,您可以修改代码以触发元数据加载时的音频设置:

    ...
    myPlayer.innerHTML="►";           
    audio.play();
    audio.onloadedmetadata = function(){
        if(lastPause){
            audio.currentTime = lastPause;
        }
    };
    

尝试用0(零)或1初始化
lastPause
变量,如下所示:
var lastPause=0
@ptCoder这是我之前做的,我还有其他问题要解决…@ptCoder,不要忘记,当lastPause为空时,if语句无论如何都不会执行。