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;
}
};
我想我在 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; } };