LoginSignup
0
0

More than 3 years have passed since last update.

【JavaScript初心者】カウントダウンプログラムを作った。

Last updated at Posted at 2021-04-15

JavaScriptの勉強のため、カウントダウンプログラムを作りました。
私は、新年までのカウントダウンや、オリンピック・パラリンピックまでのカウントダウンを試しました。

本記事の環境

※PCに環境構築を行う必要はありません。
WEBブラウザ(Google Chome)
テキストエディタ

要件・仕様

  • 言語の勉強が主目的なので、見た目はこだわらない。
  • 言語の勉強が主目的なので、処理は小分けにするし、コメントも残す。
  • フレームワークは使わない。
  • 秒単位でカウントダウンする。
  • 起点となる年月日は画面から変えられるようにする。

成果物(画面)

CoundDown_01.png

所感

  • JavaScriptが非同期で動く様子を学習するのに丁度よかった。
  • ネット上に参考になるものが多数あるので、JavaScriptの言語学習に集中できた。

成果物(ソースコード)

  • 参考程度にしてください。軽くは動作確認済みです。
CountDown.html
<!DOCTYPE html>
<html>
    <head>
        <title>カウントダウン</title>

        <style>
            body {
                background-color : #eee;
            }
            #countDown {
                position : relative;
                top : 50px;
                left : 50px;
                width : 400px;
                height : 100px;
                background-color : #fff;
                text-align: center;
            }
            #target {
                width : 300px;
                height : 14px;
                font-size : 14px;
                text-align: center;
            }
            #date {
                font-size : 30px;
                text-align: center;
            }
            #inputForm {
                font-size : 12px;
            }
            #input {
                position : relative;
                top : 100px;
                left : 50px;
                width : 400px;
                height : 60px;
                background-color : #fff;
                text-align: center;
                font-size : 12px;
            }
            #year {
                width : 60px;
                height : 12px;
                background-color : #fff;
                text-align: center;
            }
            #month,#day,#hour,#minute,#sec {
                width : 40px;
                height : 12px;
                background-color : #fff;
                text-align: center;
            }
        </style>

        <script language="JavaScript">

            // 現在日時取得処理
            function getToday(today) {
                work = new Date();
                // ミリ秒から秒に変換する。
                today["time"] = work.getTime() / 1000;
                return;
            }

            // 目標日時取得処理
            function getXDay(Xday) {
                work = new Date(document.inputForm.year.value,
                                (document.inputForm.month.value - 1),
                                document.inputForm.day.value,
                                document.inputForm.hour.value,
                                document.inputForm.minute.value,
                                document.inputForm.sec.value);

                // ミリ秒から秒に変換する。
                Xday["time"] = work.getTime() / 1000;
                return;
            }

            // カウントダウンタイマ作成処理
            function makeCountDownTimer(countDownTimer) {
                // カウントダウンするターゲットの日時を取得する。
                Xday = [];
                getXDay(Xday);

                // 現在日時を取得する。
                today = [];
                getToday(today);

                // 差を算出する。
                countDownTimer["time"] = Xday["time"] - today["time"];
                return;
            }

            // カウントダウンタイマ変換処理
            function convertCountDownTimer(countDownTimer, result) {
                // 計算用の変数を用意する。
                forDay = 60 * 60 * 24;
                forHour = 60 * 60;
                forMinute = 60;

                // 残り日数を算出する。(整数部だけ取り出す。)
                tmp = countDownTimer["time"] / forDay;
                work["day"] = Math.floor(tmp);

                // 残り時間を算出する。(整数部だけ取り出す。)
                tmp = (countDownTimer["time"] - work["day"] * forDay) / forHour;
                work["hour"] = Math.floor(tmp);

                // 残り時間を算出する。(整数部だけ取り出す。)
                tmp = (countDownTimer["time"] - work["day"] * forDay - work["hour"] * forHour) / forMinute;
                work["minute"] = Math.floor(tmp);

                // 残り時間を算出する。(整数部だけ取り出す。)
                tmp = countDownTimer["time"] - work["day"] * forDay - work["hour"] * forHour - work["minute"] * forMinute;
                work["sec"] = Math.floor(tmp);

                // 画面表示用フォーマットに変換する。
                result["date"] = work["day"] + "" + work["hour"] + "" + work["minute"] + "" + work["sec"] + "";
                return;
            }

            // カウントダウンタイマ表示処理
            function outputTimer() {
                // カウントダウンタイマを作成する。
                countDownTimer = [];
                makeCountDownTimer(countDownTimer);

                // カウントダウンタイマを画面表示用フォーマットに変換する。
                result = [];
                convertCountDownTimer(countDownTimer, result);

                // 画面に表示する。
                work = 
                   document.inputForm.year.value + "" +
                   document.inputForm.month.value + "" +
                   document.inputForm.day.value + "" +
                   document.inputForm.hour.value + "" + 
                   document.inputForm.minute.value + "" +
                   document.inputForm.sec.value + "秒まで";

                document.dateForm.target.value = work;
                document.dateForm.date.value = result["date"];
                return;
            }

            // カウントダウンタイマを表示する。
            // (0.5秒ごとに再表示する。)
            setInterval("outputTimer()", 500);

        </script>
    </head>
    <body>
        <div id="countDown">
            <form name="dateForm">
                <input type="text" name="target" id="target"></p>
                <input type="text" name="date" id="date"></input>
            </form>
        </div>
        <div id="input">
            <form name="inputForm">
                <p id="inputForm">入力フォーム</p>
                <span>
                    <input type="text" name="year" id="year" value="2022"></input>
                    <input type="text" name="month" id="month" value="01"></input>
                    <input type="text" name="day" id="day" value="01"></input>
                    <input type="text" name="hour" id="hour" value="00"></input>
                    <input type="text" name="minute" id="minute" value="00"></input>
                    <input type="text" name="sec" id="sec" value="00"></input>
                </span>
            </form>
        </div>
    </body>
</html>

関連

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0