javascriptを介して作成されたオーディオを停止します
Dec 17 2020
これが私のスクリプトの大まかな例です。
var ButtonSelect = document.querySelectorAll(".musicBtn")
ButtonSelect.forEach(element => element.addEventListener("click", playMusic))
function playMusic(){
var audio = new Audio("music1.mp3");
if (this.id == "A")
audio.play();
else if (this.id == "B") {
audio.src="music2.mp3";
audio.play();
} else if (this.id == "C") {
audio.src="music3.mp3";
audio.play();
} ...
}
そして、それはほとんどこのように続きます。そのため、どのボタンを押すかによって、別の曲が再生されます。ただし、ボタンを押すと対応する曲が開始されるだけでなく、現在再生中の曲もすべて停止するようにしたいと思います。オーディオオブジェクトはローカルで作成され、関数呼び出し後に消えるので、どうすればよいですか?どこから来たのかを特定せずに、再生中のサウンドを停止するようにページに要求する方法はありませんか?
回答
1 AHaworth Dec 17 2020 at 14:14
質問は、新しいオーディオが選択されたときに、現在再生中のオーディオを一時停止する方法を尋ねます。
追加の問題があります。指定されたコードは、ボタンが押されるたびに新しい要素を作成しますが、それが削除されることはないため、ストアは徐々に再訪されることのないオーディオ要素でいっぱいになります。
これを回避する簡単な方法は、オーディオ要素を1つだけにして、ボタンがクリックされたときにsrcを変更することです。そうすれば、後で冗長になる要素を構築することはありません。
まず最初にこのコードを試してください:
var ButtonSelect = document.querySelectorAll(".musicBtn")
var audio = new Audio("music1.mp3");
ButtonSelect.forEach(element => element.addEventListener("click", playMusic))
function playMusic(){
audio.pause();
if (this.id == "A") {
audio.src="music1.mp3";
audio.play();
}
else if (this.id == "B") {
audio.src="music2.mp3";
audio.play();
} else if (this.id == "C") {
audio.src="music3.mp3";
audio.play();
}
}
それがうまくいく場合は、コードを単純化することを検討できます。たとえば、IDを介して再生するオーディオを分類するのではなく、各ボタンのdata-src属性としてオーディオソースを設定します。