Javascript 如何获得HTML5音频持续时间以显示和避免播放()和暂停()的错误
我在正确加载html5音频对象的音频时遇到问题。这是由于正在运行的函数:Javascript 如何获得HTML5音频持续时间以显示和避免播放()和暂停()的错误,javascript,angularjs,events,html5-audio,Javascript,Angularjs,Events,Html5 Audio,我在正确加载html5音频对象的音频时遇到问题。这是由于正在运行的函数:play()和pause()以及在完全加载之前返回的持续时间 以下是控制器中调用函数以获取音频持续时间的代码: if (audioLoadButtonWasPressed) { $timeout(function () { scope.duration = audioFactory.retrieveDuration().toFixed(1); }, 200); } 以下是检索过程: func
play()
和pause()
以及在完全加载之前返回的持续时间
以下是控制器中调用函数以获取音频持续时间的代码:
if (audioLoadButtonWasPressed) {
$timeout(function () {
scope.duration = audioFactory.retrieveDuration().toFixed(1);
}, 200);
}
以下是检索过程:
function retrieveDuration() {
audio.play();
audio.pause();
if(audio.readyState != 0) {
audio.currentTime = 0;
}
return audio.duration;
}
我对这段代码有两个问题,它们有一个根本原因。由于play()
和pause()
同时运行,有时会出现错误,说明pause()阻止play()运行
,然后audio.duration为NaN
。但每次运行时,尽管如此,函数getDuration()
总是在其具有值之前返回,从而导致scope.duration
始终等于0.0
我尝试添加设置超时、承诺和其他内容,以使函数在返回之前等待,但它不起作用,
toFixed()
始终未定义,因为没有从retrieveDuration()返回值。
。我发现了有关stackoverflow的问题,但我不知道如何使此事件侦听器工作。任何建议都会有帮助。谢谢大家! 对。我把那篇文章中的eventListener放在retrieveDuration中,console.log没有启动。我不这么认为。如果加载了持续时间,这个retrieveDuration将返回一个值,对吗?目前,它不返回值。但如果我在retrieveDuration中设置断点,它会返回一个值。就像我只需要等待一秒钟,但我不知道怎么做。是的,我想你是对的。“if.play()被阻塞”是什么意思?对我有用:非常好。当我将其放入retrieveDuration时,它确实会发出警报,但仍然显示为零。你知道为什么吗?我认为这可能与play()和pause()的位置有关,但移动它们并没有改变结果。