赤字:JavaScriptの命令や重要なタグ/青字:用途に応じて変更する部分/緑字:変更可能な変数名やユーザー関数名
<form name="form_count"><input name="counter" type="text" size="10"></form> <script type="text/javascript"> <!-- count = 0; //カウントの初期値 timerID = setInterval('countup()',1000); //1秒毎にcountup()を呼び出し function countup() { count++; document.form_count.counter.value = count; } --> </script>
変数countを0に設定し、1秒毎に1を加算することで時間を数えて表示します。
関数seIntervalは指定の時間毎(1/1000秒単位)に指定したユーザー関数を呼び出します。
時間を減らすことで、カウントダウンのタイマーになります。
カウントの初期値はフォームから取っていますので、開始前に数値を変更することができます。
開始ボタンを押すとカウントダウンが始まりますが、その際に開始ボタンを使用不可の状態に変更しています。これは、開始ボタンを何度も押してしまうと、二重三重にタイマーが起動してしまうので、これを防がないと停止できなくなるからです。
停止ボタンを押すと、タイマーを停止し、開始ボタンの使用不可の状態を解除しています。
ユーザー関数countstart内では、フォームに入力された数値(文字列扱い)を関数evalを使って数値化してから変数countに入れています。関数evalを省いてしまうと、文字列として扱われてしまうため、その後の計算が行われません。
ユーザー関数countdown内では、カウントを表示した後に変数countから1を引いています。その次のif文で、カウントが0未満になるとタイマーを止めています。こうすることで、初期値を表示し、0まで表示して終わることができます。
<form name="form_countdown"> <input name="counter" type="text" value="60" size="10"> <input name="start" type="button" value="開始" onClick="countstart()"> <input name="stop" type="button" value="停止" onClick="countstop()"> </form> <script type="text/javascript"> <!-- function countstart() { count = eval(document.form_countdown.counter.value); timerID = setInterval('countdown()',1000); document.form_countdown.start.disabled = true; //開始ボタンを使用禁止 } function countstop() { clearInterval(timerID); document.form_countdown.start.disabled = false; //開始ボタンを解除 document.form_countdown.reset(); //初期値に戻す } function countdown() { document.form_countdown.counter.value= count; //カウント表示 count--; //カウントダウン if (count < 0) countstop(); //カウント終了 } --> </script>