Vanilla『Javascript』で「しょぼいストップウォッチ」をつくってみたよ

当ページはアフィリエイト広告を利用しています

記事内に広告が含まれています。
Vanilla『Javascript』で「しょぼいストップウォッチ」をつくってみたよ
提供:photoAC「ななほしてんとう様」

はい。そうです。

以前、記事にしていたjQueryでつくったストップウォッチのソースをChatGPT でVanillaにしただけのものです。つまりjQueryから『Javascript』に変換しただけです(>_<)

すみません。ただ、怠慢ってことではなく、Vanillaも勉強した方がいいかな、と思って。

だったら、以前jQueryでつくったやつを元に学んだ方がいいかなと思って、勉強ついでにブログにも載せた次第です。

HTMLとCSS

<html lang="ja">
<head>
<meta charset="utf-8">
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<style>
.count_timer_container table{
    width:100%;
    height:100%;
}
.count_timer_container table td{
    width:25%;
    height:20%;
    border:1px solid #eee;
    background-color:white;
}
.count_timer_container table input{
    font-size:5vh;
    height:100%;
    width:100%;
    text-align:center;
    border:none;
    background-color:white;
}
 
</style>
</head>
<body>
    <center class="count_timer_container">
        <table border="5">
            <tr>
                <td colspan="2">
                    <input class="count_display" type="text" size="20" value="" disabled>
                </td>
            </tr>
            <tr>
                <td><input class="btn_start" type="button" value="start"></td>
                <td><input class="btn_stop"  type="button" value="stop"></td>
            </tr>
            <tr>
                <td colspan="2" >
                    <input class="btn_clear" type="button" size="20" value="clear">
                </td>
            </tr>
        </table>
    </center>
</body>
</html>   

javascript

<script type="text/javascript">
/*
ストップウォッチ
主な概要:
スタートボタンを押下して計測を開始。
ストップボタンを押下して開始から経過した時間を取得できる
*/
document.addEventListener("DOMContentLoaded", function () {
    let num_ms = 0; // ミリ秒
    let num_s = 0; // 秒
    let num_m = 0; // 分
    let now_time = 0; // 現在時刻
    let start_time = 0; // スタートボタン押下時の時刻
    let pre_time = 0; // ストップボタン押下時の経過時間
    let time_id = 0; // setTimeout()を止める時に必要なID
    let date = 0; // Date()のオブジェクト変数
    let count_display = ""; // 一時的な文字を格納する際に使用

    /*
    初期値の設定
    */
    document.querySelector(".count_display").value = "00:00:00";
 	//スタートボタンを有効に
    document.querySelector(".btn_start").disabled = false;
 	//ストップボタンを無効にする
    document.querySelector(".btn_stop").disabled = true;
	/*
    ■スタートボタン	・スタートボタンが押下されたら、スタートボタンを無効にしてストップボタンを有効にする
    ・スタートボタン押下時の時刻を取得しておく
    ・countUp()を実行して計測開始
    */
    document.querySelector(".btn_start").addEventListener("click", function () {
        document.querySelector(".btn_start").disabled = true;
        document.querySelector(".btn_stop").disabled = false;
        start_time = Date.now();
        countUp();
    });
    /*
    ■ストップボタン
	・ストップボタンが押下されたら、スタートボタンを有効にしてストップボタンを無効にする
    ・ストップボタン押下時の経過時間を取得しておく【繰り返し計測する際に必要となる】
    ・計測を止める【setTimeout関数を止めるにはIDを指定する必要がある】
    */
    document.querySelector(".btn_stop").addEventListener("click", function () {
        document.querySelector(".btn_start").disabled = false;
        document.querySelector(".btn_stop").disabled = true;
        pre_time += now_time - start_time;
        clearTimeout(time_id);
    });
    /*
    ■クリアボタン
    ・変数の初期値を0にする
    ・クリアボタンが押下されたら、スタートボタンを有効にしてストップボタンを無効にする
    ・画面を00:00:00にする
    */
    document.querySelector(".btn_clear").addEventListener("click", function () {
        clearTimeout(time_id);
        now_time = 0;
        start_time = 0;
        pre_time = 0;
        document.querySelector(".btn_start").disabled = false;
        document.querySelector(".btn_stop").disabled = true;
        document.querySelector(".count_display").value = "00:00:00";
    });
    /*
    ■経過時間の計測【下記内容を1ミリ秒毎に、無限に実行する
    ・現在時刻を取得
    ・現在時刻 - 開始時刻 + 前回の履歴(前回の経過時間) で経過時間を取得
    ・経過した【分・秒・ミリ秒】を変数に格納
    ・画面に経過時間を表示
    */
    function countUp() {
        now_time = Date.now();
        date = new Date(now_time - start_time + pre_time);
        num_ms = Math.floor(date.getMilliseconds() / 10);
        num_s = date.getSeconds();
        num_m = date.getMinutes();

        time_id = setTimeout(() => {
            countUp();
        }, 1);
		//経過時間の表示
        //1桁の場合は数値の前に0を付けて画面に表示する
        document.querySelector(".count_display").value =
            addDigits(num_m) + ":" + addDigits(num_s) + ":" + addDigits(num_ms);
    }
    /*
    ■2桁表示
    ・1桁の場合は数値の前に0を付ける
    ・例: 1秒 → 01秒
    */
    function addDigits(count_data) {
        if (count_data < 10) {
            count_display = "0" + count_data;
        } else {
            count_display = count_data;
        }
        return count_display;
    }
});
</script>