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

时间:2015-04-28 13:58:22

标签: javascript audio alert innerhtml isset

我认为我在JavaScript Audio 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();
        }

    }

);

BUT

如果我删除或注释提示行alert(lastPause);,则在定义lastPause时音频卡住或低于... ...第二次用户按下播放(暂停后)。

1 个答案:

答案 0 :(得分:2)

我假设这个问题与this question有关,我的答案也适用于此,

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

  • 摆脱audio.src行,也可以用它删除一堆其他冗余代码。
  • 当你使用警报时它起作用的原因是,当触发警报时,接下来的几行不会执行,直到你解雇它,在这几秒钟/毫秒内,音源元素的来源已被改变了有足够的时间加载新元数据,只有这样才能设置当前时间。所以你可以修改代码来触发元数据加载时音频的设置:

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

fiddle demo