2015-04-28 83 views
1

我认为我在JavaScript Audio API上发现了一个错误。Javascript :: audio.currentTime只有在提醒后才能正确更新

我的代码是可以正常使用这样的:

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

    } 

); 

如果我删除或remark警戒线alert(lastPause);lastPause定义或督察卡音频...第二次的用户按播放(暂停后)。

+0

尝试用初始化'lastPause'变量0(零)或1,如下所示:'变种lastPause = 0;' – ptCoder

+0

@ptCoder这就是我之前做过的事情,并且我还有其他问题需要解决...... –

+0

@ptCoder,并且不要忘记if语句在lastPause为空时不会执行任何操作。 –

回答

2

我假设有适用于这也是这个问题是有关this question我的回答,

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

  • 摆脱audio.src行,其他冗余代码也可以用它去掉。
  • 当你使用警报时,它工作的原因是,当警报被触发时,接下来的几行不会被执行直到你抛弃它,在这些宝贵的几秒/毫秒内,其源被改变的音频元素有足够的时间加载新的元数据,才可以设置当前时间。这样你就可以修改代码来触发元数据加载音频的设置:

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

fiddle demo

相关问题