Iroha Board(CakePHP)でe-ラーニングシステムを試作しています。
■[HTML5] 音声ファイルをJSで再生/停止する – audioタグ編
https://blog.katsubemakito.net/html5/audio1
上記の記事を参考にJavaScriptでシンプルな音声再生ボタンを実装したいのですが、
一つ目のボタンしか再生されず、二つ目以降のボタンはクリックしても一時停止に切り替わらず再生もされません。
コードは以下のようになっています。
HTML
1<!DOCTYPE html> 2<html> 3<head> 4 <meta charset="UTF-8"> 5 <title>HTML5 Audio Sample1</title> 6</head> 7<body> 8<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous"> 9 10<!-- 音声ファイル --> 11<audio id="bgm1"> 12 <source src="https://miku3.net/asset/sound/html5/op.mp3" type="audio/mp3"> 13</audio> 14<!-- 再生ボタン --> 15<button id="btn-play" type="button"><i class="fas fa-play"></i></button> 16 17<!-- 音声ファイル --> 18<audio id="bgm1"> 19 <source src="https://miku3.net/asset/sound/html5/op.mp3" type="audio/mp3"> 20</audio> 21<!-- 再生ボタン --> 22<button id="btn-play" type="button"><i class="fas fa-play"></i></button> 23 24<!-- 音声ファイル --> 25<audio id="bgm1"> 26 <source src="https://miku3.net/asset/sound/html5/op.mp3" type="audio/mp3"> 27</audio> 28<!-- 再生ボタン --> 29<button id="btn-play" type="button"><i class="fas fa-play"></i></button> 30 31<!-- 音声ファイル --> 32<audio id="bgm1"> 33 <source src="https://miku3.net/asset/sound/html5/op.mp3" type="audio/mp3"> 34</audio> 35<!-- 再生ボタン --> 36<button id="btn-play" type="button"><i class="fas fa-play"></i></button> 37 38<!-- 音声ファイル --> 39<audio id="bgm1"> 40 <source src="https://miku3.net/asset/sound/html5/op.mp3" type="audio/mp3"> 41</audio> 42<!-- 再生ボタン --> 43<button id="btn-play" type="button"><i class="fas fa-play"></i></button> 44</body> 45</html>
JavaScript
1<script> 2 for(var i=0;i<audios.length;i++){ 3audios[ i ].addEventListener( "play", function(){ 4for(var j=0;j<audios.length;j++){ 5if( audios[ j ]!=this ){ audios[ j ].pause() } 6} 7}, false ); 8} 9 const bgm1 = document.querySelector("#bgm1"); // <audio> 10 const btn = document.querySelector("#btn-play"); // <button> 11 btn.addEventListener("click", ()=>{ 12 // pausedがtrue=>停止, false=>再生中 13 if( ! bgm1.paused ){ 14 btn.innerHTML = '<i class="fas fa-play"></i>'; 15 bgm1.pause(); 16 } 17 else{ 18 btn.innerHTML = '<i class="fas fa-pause"></i>'; 19 bgm1.play(); 20 } 21 }); 22 /** 23 * [event] 再生終了時に実行 24 */ 25 bgm1.addEventListener("ended", ()=>{ 26 bgm1.currentTime = 0; // 再生位置を先頭に移動 27 btn.innerHTML = '<i class="fas fa-play"></i>'; // 「再生ボタン」に変更 28 }); 29</script>
追記
id要素をclassに書き換えましたが当初の現象と変わりませんでした。
HTML
1<!DOCTYPE html> 2<html> 3<head> 4 <meta charset="UTF-8"> 5 <title>HTML5 Audio Sample1</title> 6</head> 7<body> 8<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous"> 9 10<!-- 音声ファイル --> 11<audio class="bgm1"> 12 <source src="https://miku3.net/asset/sound/html5/op.mp3" type="audio/mp3"> 13</audio> 14<!-- 再生ボタン --> 15<button class="btn-play" type="button"><i class="fas fa-play"></i></button> 16 17<!-- 音声ファイル --> 18<audio class="bgm1"> 19 <source src="https://miku3.net/asset/sound/html5/op.mp3" type="audio/mp3"> 20</audio> 21<!-- 再生ボタン --> 22<button class="btn-play" type="button"><i class="fas fa-play"></i></button> 23 24<!-- 音声ファイル --> 25<audio class="bgm1"> 26 <source src="https://miku3.net/asset/sound/html5/op.mp3" type="audio/mp3"> 27</audio> 28<!-- 再生ボタン --> 29<button class="btn-play" type="button"><i class="fas fa-play"></i></button> 30 31<!-- 音声ファイル --> 32<audio class="bgm1"> 33 <source src="https://miku3.net/asset/sound/html5/op.mp3" type="audio/mp3"> 34</audio> 35<!-- 再生ボタン --> 36<button class="btn-play" type="button"><i class="fas fa-play"></i></button> 37 38<!-- 音声ファイル --> 39<audio class="bgm1"> 40 <source src="https://miku3.net/asset/sound/html5/op.mp3" type="audio/mp3"> 41</audio> 42<!-- 再生ボタン --> 43<button class="btn-play" type="button"><i class="fas fa-play"></i></button> 44</body> 45</html>
JavaScript
1<script> 2 for(var i=0;i<audios.length;i++){ 3audios[ i ].addEventListener( "play", function(){ 4for(var j=0;j<audios.length;j++){ 5if( audios[ j ]!=this ){ audios[ j ].pause() } 6} 7}, false ); 8} 9 const bgm1 = document.querySelector(".bgm1"); // <audio> 10 const btn = document.querySelector(".btn-play"); // <button> 11 btn.addEventListener("click", ()=>{ 12 // pausedがtrue=>停止, false=>再生中 13 if( ! bgm1.paused ){ 14 btn.innerHTML = '<i class="fas fa-play"></i>'; 15 bgm1.pause(); 16 } 17 else{ 18 btn.innerHTML = '<i class="fas fa-pause"></i>'; 19 bgm1.play(); 20 } 21 }); 22 /** 23 * [event] 再生終了時に実行 24 */ 25 bgm1.addEventListener("ended", ()=>{ 26 bgm1.currentTime = 0; // 再生位置を先頭に移動 27 btn.innerHTML = '<i class="fas fa-play"></i>'; // 「再生ボタン」に変更 28 }); 29</script>