停止动态创建的音频

Stop dynamically created audios

我正在播放来自 Angular 中某项服务的音频,但我无法让它停止。这是我的 play() 方法:

play(item: string): void {
  const audio = new Audio();
  audio.src = item;
  audio.load();
  audio.play();
}

然后,在我的组件中我创建了一个 mute() 方法,我想在其中停止所有当前播放的音频:

mute(): void {
  const sounds = document.getElementsByTagName('audio');
  console.log(sounds);
  for (let i = 0; i < sounds.length; i++) {
    sounds[i].pause();
  }
}

但是,它在我的 console.log 中没有显示任何声音,因此,none 正在暂停。

document.getElementsByTagName('audio') 找不到音频标签,因为它们尚未添加到文档中。

您可以使用 play() 方法末尾的这行代码将音频元素添加到文档中:document.getElementsByTagName("body")[0].appendChild(audio);

或者,您可以将音频对象保存在一个数组中,并使该数组可用于您的组件,而不是使用 document.getElementsByTagName('audio')。在 Angular 应用程序中,这种方法被认为优于直接 DOM 操作。

在您的 play 方法中,您创建了 Audio 的实例并让它播放,但除了浏览器之外没有人知道这个实例...

查询 DOM 不会导致您的 Audio 实例... 您必须持有所有正在播放的音频的列表 file/s。和静音停止 them/it.