【JS】カウントダウン

by tea4two

HTML

<link rel="stylesheet" href="http://reset5.googlecode.com/hg/reset.min.css">
<article id="container">
     <h1>Countdown Timer</h1>

    <div id="inner">
        <div id="inputArea"></div>
        <p id="timer">0:00</p>
    </div>
</article>

CSS

#container {
    width: 80%;
    text-align: center;
    margin: 0 auto;
    background-color: #fff;
    border: 1px solid #dedede;
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;
    border-radius: 5px;
    -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .4);
    -moz-box-shadow: 0 0 5px rgba(0, 0, 0, .4) box-shadow: 0 0 5px rgba(0, 0, 0, .4)
}
#container h1 {
    background-color: #dedede;
    padding: .5em;
    font-weight: bold;
    font-size: 120%;
    text-shadow: 1px 1px 0 #fff;
    color: #333;
    -webkit-border-radius: 5px 5px 0 0;
    -moz-border-radius: 5px 5px 0 0;
    border-radius: 5px 5px 0 0;
}
#inner {
    padding: 1em;
}
#inputArea {
    margin-bottom: 1em;
}
#timer {
    font-size: 30px;
    font-weight: bold;
    font-family: Arial, sans-serif;
}

JavaScript

//グローバル変数(あとで値をストアする)
var secondsRemaining, intervalHandle;

/*  3. ファンクション
    カウントダウンが終了した時に id="inputArea"を表示させる
-----------------------------------*/
function resetPage() {
    document.getElementById('inputArea').style.display = 'display';    
}

/* 2. ファンクション
   タイマーとしてつかう
-----------------------------------*/
function tick() {
    //id="timer"をつかむ
    var timeDisplay = document.getElementById('timer');
    
    //秒を mm:ss のフォーマットに変換
    var min = Math.floor(secondsRemaining / 60);
    var sec = secondsRemaining - (min * 60);
    
    //秒数を01,02,...18 のように2桁の表示にするフィルター的な。
    if ( sec < 10 ) {
        sec = '0' + sec;
    }
    
    //コロン(:)で連結する
    var message = min + ':' + sec;
    //表示を変える
    timeDisplay.innerHTML = message;
    
    //0まで到達したらストップする
    if ( secondsRemaining === 0 ) {
        alert('タイムアップ!');
        clearInterval(intervalHandle);
        resetPage();
    }
    //デクリメントを使い1秒ずつ引いていく
    secondsRemaining--;
}

/* 1. ファンクション
   カウントダウンスタート用
-----------------------------------*/
function startCountdown() {
    //inputに挿入された値を変数minutesにストアする
    var minutes = document.getElementById('minutes').value;
    
    //数字かどうかチェックする
    if( isNaN(minutes) || minutes.length === 0 ) {
        alert('半角数字を入れてください。');
        return;//処理をストップ
    }
    
    //何秒かチェックする
    secondsRemaining = minutes * 60;
    
    //1000ミリ秒つまり1秒毎にtick()を実行する
    //intervalHandleにはインターバルIDがストアされる。それをあとでclearする。
    //setInterval内のファンクションに()を付けない理由はEvernoteに。
    intervalHandle = setInterval(tick, 1000);
    console.log(intervalHandle);
    
    //inputの入ったDIVを非表示にする
    document.getElementById('inputArea').style.display = 'none';
}

//ページ(window)がロードされたら実行する
window.onload = function() {
    //input要素を生成し、IDとtypeの設定を行う
    var inputMinutes = document.createElement('input');
    inputMinutes.setAttribute('id','minutes');
    inputMinutes.setAttribute('type','text');
    
    //次にボタンの作成
    var startButton = document.createElement('button');
    var buttonText =...