停止动态创建的音频

时间:2017-08-14 21:45:37

标签: javascript angular typescript html5-audio

我正在使用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中没有显示任何声音,因此,它们都没有被暂停。

2 个答案:

答案 0 :(得分:1)

public void openEditTask(int position) { if (newTaskFragment != null) closeNewTaskFragment(); if (editTaskFragment != null) closeEditTaskFragment(); editTaskFragment = EditTaskFragment.newInstance(position); transaction = getSupportFragmentManager().beginTransaction(); transaction.setCustomAnimations(R.anim.enter_from_right, R.anim.exit_to_right); transaction.replace(R.id.edit_task_frame_xml, editTaskFragment); transaction.commit(); } 找不到音频标签,因为它们尚未添加到文档中。

您可以使用document.getElementsByTagName('audio') - 方法末尾的这行代码将音频元素添加到文档中:play()

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

答案 1 :(得分:1)

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

查询DOM不会导致您的Audio个实例... 您必须保存所有播放音频文件的列表。并静音停止它们。