【发布时间】:2010-12-05 01:10:42
【问题描述】:
我用 jQuery 编写了一些 JavaScript,它加载了一个带有 HTML 5 <audio> 标签的声音文件,并在鼠标单击时开始播放该声音文件的一个新实例(以便它可以并行播放多次/覆盖)。
HTML:
<audio id="audiotemplate" src="audio/myfile.ogg"></audio>
JavaScript:
mybutton.click(function() {
$('#audiotemplate').clone()[0].play();
});
这按预期工作,但会造成内存泄漏,导致 FF 耗尽系统 RAM,并且如果您单击该按钮太多次,Chromium 会显示其“啊,快拍”页面。
编辑:为了快速测试,最好使用$(document).keypress 而不是mybutton.click,并按住按钮。
声音文件播放完毕后如何清理<audio>元素?
注意:我不会将克隆的元素插入到页面中。
注意 2:如果您单击也会发生泄漏,等到声音结束,再次单击...
(我对解决方案感到满意,但也感谢解释为什么会发生泄漏。)
【问题讨论】:
-
游戏有点晚了,但你为什么要克隆它们,而不是暂停/播放剪辑?
var sound = $('#audiotemplate')[0]; sound.pause(); sound.currentTime = 0; sound.play();- 此代码将暂停剪辑,将其重置为 0 并再次播放。唯一需要注意的是你不能在播放之前设置 currentTime,所以你需要一个 if 语句来检查它是否已经播放了。 -
@Gavin 因为有时它们需要重叠播放(这最初来自于在按键上播放某些东西)。
-
我最近遇到了类似的问题,暂停/重置时间并再次播放效果很好,无需克隆任何东西?现在没关系,但认为它可能值得其他人研究?
标签: javascript jquery memory-leaks html5-audio