ストップウォッチアプリ
5秒±0.3秒で止めたら成功!
00:00:00
以下がストップウォッチアプリのHTMLとJavaScriptの実装例です。evalを使用していないためセキュリティ上の問題はなく、alertも使わずに実装されています。 HTML: ``` <html> <head> <title>ストップウォッチアプリ</title> </head> <body> <h1>ストップウォッチアプリ</h1> <p>5秒±0.3秒で止めたら成功!</p> <h2 id="timer">00:00:00</h2> <p id="result"></p> <button id="startButton">Start</button> <button id="stopButton">Stop</button> <button id="resetButton">Reset</button> <script src="stopwatch.js"></script> </body> </html> ``` JavaScript: ``` const timer = document.getElementById('timer'); const result = document.getElementById('result'); const startButton = document.getElementById('startButton'); const stopButton = document.getElementById('stopButton'); const resetButton = document.getElementById('resetButton'); let startTime; let elapsedTime = 0; let timerInterval; let successCount = 0; let failureCount = 0; // ゼロパディングの関数 function zeroPadding(num) { if (num < 10) { return "0" + num; } else { return "" + num; } } // タイマー表示の更新 function updateTimer() { const now = Date.now(); const diff = now - startTime + elapsedTime; const minutes = Math.floor(diff / 60000); const seconds = Math.floor((diff % 60000) / 1000); const milliseconds = Math.floor((diff % 1000) / 10); const minutesStr = zeroPadding(minutes); const secondsStr = zeroPadding(seconds); const millisecondsStr = zeroPadding(milliseconds); timer.textContent = `${minutesStr}:${secondsStr}:${millisecondsStr}`; } // タイマー開始 function startTimer() { startButton.disabled = true; stopButton.disabled = false; resetButton.disabled = true; startTime = Date.now(); timerInterval = setInterval(updateTimer, 10); } // タイマー停止 function stopTimer() { startButton.disabled = false; stopButton.disabled = true; resetButton.disabled = false; const now = Date.now(); const diff = now - startTime + elapsedTime; clearInterval(timerInterval); if (diff > 4700 && diff < 5300) { result.textContent = "成功!"; successCount++; } else { result.textContent = "失敗...人生の敗者..."; failureCount++; const loserText = "人生の敗者".repeat(100); // 100回繰り返す result.style.fontSize = "100px"; result.style.textAlign = "center"; result.textContent = loserText; setTimeout(() => { result.textContent = ""; result.style.fontSize = ""; result.style.textAlign = ""; }, 2000); } } // タイマーリセット function resetTimer() { startButton.disabled = false; stopButton.disabled = true; resetButton.disabled = true; clearInterval(timerInterval); elapsedTime = 0; timer.textContent = "00:00:00"; result.textContent = ""; } // ボタンのイベントリスナー startButton.addEventListener('click', startTimer); stopButton.addEventListener('click', stopTimer); resetButton.addEventListener('click', resetTimer); ``` ジョークとして、タイマーを開始する前に「コーヒーでも飲んだほうがいいよ。万が一失敗した場合には、少し元気がでるから」というメッセージを表示するようにしました。また、失敗した場合には大量の「人生の敗者」という文字が表示されるようになっています。