使用 Javascript,我有一个使用 createElement("audio")
创建音频元素的函数,并开始循环播放而不使用 appendChild()
,我的意思是不将它附加到 DOM。创建的元素保存在一个变量中,我们称之为 music1
:
music = document.createElement("audio");
music.addEventListener("loadeddata", function() {
music.play();
});
music.setAttribute("src", music_Source);
我想做的是改变播放的音乐,如果可能的话使用相同的函数,并将元素存储在同一个变量中。
我所做的是在上面的代码之前:
if(typeof(music) == "object") {
music.pause();
music = null;
}
但是:如果我删除 music.pause()
,第一首音乐会继续播放,第二首音乐也会同时开始播放,这让我觉得第一首音乐总是在文档/内存中的某个地方。此外, music = null
似乎没用。我不想使用 jQuery。
您有什么想法可以正确删除第一首音乐、删除元素等吗?
实际上,kennis 的评论是正确的,我试图只更改 src 属性,而不修改“music”变量(既不将其设置为 null,也不重新创建元素),它似乎也有效。所以,为了记录:对于这里改变的每个源是函数:
if(typeof(music) != "object") {
//audio element does not exist yet:
music = document.createElement("audio");
music.addEventListener("loadeddata", function() {
music.play();
});
}
music.setAttribute("src", music_Source);
原文由 Jo Pango 发布,翻译遵循 CC BY-SA 4.0 许可协议
而不是删除,更好的方法是更改 src
这样你总是在处理同一个对象,这样你就不会经常点击 DOM,也可以避免同时有两个玩家的问题
还要确保使用 .load 方法加载新音频,否则它将继续播放旧音频。