javascript - 在 native JavaScript 中等待其他事情完成

标签 javascript html audio

我正在尝试使用 JavaScript 和 HTML5 制作音频播放器。现在我遇到了错误,当我尝试更改文件,然后根据 slider 的位置播放它时,player.duration 为 NaN,因为尚未加载那么远。如果我发出警报,那么它就可以正常工作。所以基本上,如果浏览器只是勉强挂起,它就会给它足够的时间,而当它直接运行时,它不会首先完成加载。

player.src = file;
// The next command is reached before the full effect of the above line is finished
player.currentTime = (slider.offsetLeft) / trackWidth * player.duration;

那里还有其他一些东西,但本质上,我需要一种方法来稍微暂停一下,或者在第二行运行之前等待一切完成。我意识到我可以在第二行使用 setTimeout,但该行位于函数中的几个位置,所以我希望有一个“一个修复”,可以放在第一行之后。

最佳答案

您需要做的是等待音频的元数据变得可用。这可以通过等待 loadedmetadata event 来实现。并在该事件触发后在回调中执行其余代码。

player.addEventListener('loadedmetadata', function() {
    player.currentTime = (slider.offsetLeft) / trackWidth * player.duration;
    // and the remainder of your code relating to the audio element
}, false);

唯一潜在的问题是,如果文件加载速度非常快(即它已经在缓存中),则可能会在附加事件处理程序之前触发事件。最好在添加事件监听器后分配 src 属性。

关于javascript - 在 native JavaScript 中等待其他事情完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19812631/

相关文章:

javascript - jQuery 中的 Rel 属性

javascript - 如何使任何子组件在 React Native 中变得模糊?

audio - 使用SceneKit中的键在节点上停止声音作为 Action

javascript - 订阅现有集合的计数

javascript - Navigator.MediaDevices.getUserMedia() 使用什么相机通信标准?

html - 在 SVG 中悬停在多边形上时显示文本

html - GridView 中的单选按钮

javascript - 如何查找二叉树中是否存在值

ios - 您如何在iOS上录制PCM音频文件?

.net - .NET 中的语音识别