椅子取りゲーム用の音楽プレイヤーを作った
概要
ブラウザ上に音楽ファイルをドロップするとメニューが出る。
そこで指定した秒数の範囲内で乱数を生成して、イントロからその分だけ再生するやつ。
HTML5のDrag and Drop APIとFile APIのテスト。
デモ
コード
chairs.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script src="chairs.js"></script> </head> <body> <h1>椅子取りゲーム</h1> <div id="description" style="display:block;">音楽ファイルをドロップ</div> <div id="player" style="display:none;"> 最小秒数<input id="min" type="text" size="1" value="1"><br> 最大秒数<input id="max" type="text" size="1" value="5"><button id="play" type="button">スタート</button> </div> </body> </html>
chairs.js
window.onload = function() { var bgm; document.addEventListener("dragover", function(e) { e.preventDefault(); }); document.addEventListener("drop", function(e) { e.preventDefault(); var file = e.dataTransfer.files[0]; var reader = new FileReader(); reader.onload = function(e) { bgm = new Audio(e.target.result); document.getElementById("description").style.display = "none"; document.getElementById("player").style.display = "block"; } reader.readAsDataURL(file); }); document.getElementById("play").addEventListener("click", function(e) { bgm.play(); var sec = Math.random() * (document.getElementById("max").value - document.getElementById("min").value) + Number(document.getElementById("min").value); setTimeout(function() { bgm.pause(); bgm.currentTime = 0; }, sec * 1000); }) }
所感
- dragoverをキャンセルしないとページ遷移する
- readAsDataURLはBase64文字列化して返すやつなので、でかいファイルを読み込むと固まります
- そもそも椅子取りゲームにパソコン使わない