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

Javascript:: audio.currentTime is updated properly only after alert

我想我在 JavaScript 音频 API 上发现了一个错误。

我的代码运行得非常完美:

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(lastPause); 定义 lastPause 时音频卡住或 iow... 用户第二次按下播放(暂停后)。

我假设这个问题与 我的回答也适用,

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

  • 删除 audio.src 行,其他一些冗余代码也可以一起删除。
  • 当你使用警报时它起作用的原因是,当警报被触发时,接下来的几行直到你关闭它才会执行,在这宝贵的几秒/毫秒内,音频元素的源has been changed 有足够的时间加载新的元数据,然后才能设置当前时间。因此您可以修改代码以在元数据加载时触发音频设置:

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

fiddle demo