こんにちは。KOUKIです。
本記事は、Udemyの「50 Projects In 50 Days – HTML, CSS & JavaScript」で学習したことを載せています。
<目次>
実装するもの
今回は、Web上に設置されたボタンから音楽を流す方法を勉強しました。
demoは、「こちら」で確認できます。
環境構築
簡単な環境構築をお願いします。
必要なファイルは、以下の通りです。
1 2 3 4 5 6 |
$ tree . ├── index.html ├── script.js └── style.css └── sounds |
音声(sounds)は「こちら」で取得できます。
CSS版
開発
ページの作成
最初にページを作成しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" href="style.css" /> <title>Sound Board</title> </head> <body> <audio id="applause" src="sounds/applause.mp3"></audio> <audio id="boo" src="sounds/boo.mp3"></audio> <audio id="gasp" src="sounds/gasp.mp3"></audio> <audio id="tada" src="sounds/tada.mp3"></audio> <audio id="victory" src="sounds/victory.mp3"></audio> <audio id="wrong" src="sounds/wrong.mp3"></audio> <div id="buttons"></div> <script src="script.js"></script> </body> </html> |
HTMLのaudioタグは、文書内に音声コンテンツを埋め込むために使用します。
このHTMLをブラウザ上で表示すると以下のようになります。

何も表示されていません。audioタグに「controls」などのタグをつければいい感じの再生ボタンが表示されますが、今回はJavaScriptでボタンを作るのでひとまずこれでOKです。
スタイルの追加
次にスタイルを記述しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@200;400&display=swap'); * { box-sizing: border-box; } body { background-color: rgb(161, 100, 223); font-family: 'Poppins', sans-serif; display: flex; flex-wrap: wrap; align-items: center; justify-content: center; text-align: center; height: 100vh; overflow: hidden; margin: 0; } .btn { background-color: rebeccapurple; border-radius: 5px; border: none; color: #fff; margin: 1rem; padding: 1.5rem 3rem; font-size: 1.2rem; font-family: inherit; cursor: pointer; } .btn:hover { opacity: 0.9; } .btn:focus { outline: none; } |
ここまで実装すると以下のようになります。

JavaScriptの実装
音源ボタンを作成する
最初に音源ボタンを作成しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// 音源ボタンの元(これはbuttonのIDにもなっている) const sounds = ['applause', 'boo', 'gasp', 'tada', 'victory', 'wrong'] // 音源ボタンを作成 sounds.forEach(sound => { // button要素を作成 const btn = document.createElement('button') // btnクラスを追加 btn.classList.add('btn') // buttonのラベルを設定 btn.innerText = sound // buttonsIDの子要素としてbuttonを追加 document.getElementById('buttons').appendChild(btn) }) |
createElementでHTML要素を作成できます。そして、この要素にbtnクラスを追加し、innerTextにてボタンのラベルを設定、getElementByIdでbuttonsIDが付与されているHTMLの子要素として追加しています。
ここまで実装すると以下のように表示されます。

クリックイベントの登録
次にクリックイベントを登録して、音源ボタンを押下した時に音楽が流れるようにしましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// 音源ボタンを作成 sounds.forEach(sound => { ... // buttonのラベルを設定 ... // clickイベントを登録 btn.addEventListener('click', () => { // playで音楽が流せる document.getElementById(sound).play() }) // buttonsIDの子要素としてbuttonを追加 }) |
soundsに設定した値(‘applause’, ‘boo’, ‘gasp’, ‘tada’, ‘victory’, ‘wrong’)は、audioタグのIDです。
1 2 3 4 5 6 |
<audio id="applause" src="sounds/applause.mp3"></audio> <audio id="boo" src="sounds/boo.mp3"></audio> <audio id="gasp" src="sounds/gasp.mp3"></audio> <audio id="tada" src="sounds/tada.mp3"></audio> <audio id="victory" src="sounds/victory.mp3"></audio> <audio id="wrong" src="sounds/wrong.mp3"></audio> |
そのため、getElementById(sound)にて、audio要素が取得できます。audio要素は「play」メソッドを持っており、これを実行すると音楽が流れます。
音楽再生の制御
もう一つやることがあります。現状だと、音楽を流している最中に他のボタンをクリックすると音楽が同時に流れてしまいます。
流れる音楽を常に一つの状態にしましょう。先ほど作成したクリックイベントに次の処理を加えます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
sounds.forEach(sound => { ... // clickイベントを登録 btn.addEventListener('click', () => { // 音楽を止める stopSongs() // playで音楽が流せる document.getElementById(sound).play() }) ... }) function stopSongs() { sounds.forEach(sound => { const song = document.getElementById(sound) // 音楽を止める song.pause() // 最初に巻き戻す song.currentTime = 0; }) } |
audio要素を取得したら「pause」メソッドで音楽が止められるようです。
また、「currentTime」プロパティは音楽再生時間を表していて、0秒に設定すると一番最初に巻き戻ります。
これでOKですね。
おわりに
audioタグは便利そうですね。あまり使ったことはなかったのですが、簡単なミニゲームを作る時に役立ちそうな気がします。
それでは、また!
JavaScriptまとめ
JavaScript ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
// 音源ボタンの元(これはbuttonのIDにもなっている) const sounds = ['applause', 'boo', 'gasp', 'tada', 'victory', 'wrong'] // 音源ボタンを作成 sounds.forEach(sound => { // button要素を作成 const btn = document.createElement('button') // btnクラスを追加 btn.classList.add('btn') // buttonのラベルを設定 btn.innerText = sound // clickイベントを登録 btn.addEventListener('click', () => { // 音楽を止める stopSongs() // playで音楽が流せる document.getElementById(sound).play() }) // buttonsIDの子要素としてbuttonを追加 document.getElementById('buttons').appendChild(btn) }) function stopSongs() { sounds.forEach(sound => { const song = document.getElementById(sound) // 音楽を止める song.pause() // 最初に巻き戻す song.currentTime = 0; }) } |
コメントを残す
コメントを投稿するにはログインしてください。