Остановить динамически созданные аудио
Я играю аудио из сервиса в 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 ответа
document.getElementsByTagName('audio')
не находит аудио-теги, потому что они не были добавлены в документ.
Вы можете добавить аудио-элементы в документ с этой строкой кода в конце вашего play()
-метод: document.getElementsByTagName("body")[0].appendChild(audio);
В качестве альтернативы вы можете сохранить аудио объект в массиве и сделать этот массив доступным для вашего компонента вместо использования document.getElementsByTagName('audio')
, Этот подход считается предпочтительным по сравнению с прямым манипулированием DOM в приложениях Angular.
В вашем play
Метод, который вы создали экземпляр Audio
и пусть играет, но никто кроме браузера не знает об этом экземпляре...
Запрос DOM не приведет к вашему Audio
экземпляры... Вы ДОЛЖНЫ содержать список всех воспроизводимых аудиофайлов. и на немой остановить их / это.