コース一覧
JavaScript道場 ハレノヒ珈琲を動かす10問
時計の表示を整えよ

JavaScript道場 ハレノヒ珈琲を動かす10問

JavaScript の基本を終えた人が、白紙から画面を動かす演習専用コースです。解説はありません。依頼と完成条件だけを読み、自分でコードを組み立てます。HTML と CSS は用意してあるので、書くのは JavaScript だけです。手が止まったときのために、方針・使う構文・部分解の3段階のヒントを各問に用意しています。クリックへの応答から始まり、クラスの切り替え、入力の監視、配列の絞り込みと描画、フォームの検証、タブの出し分けを経て、最後は予約ページの一連の流れまで、10問で主要な操作を一巡します。1問15分から45分、全10問で約5時間です。JavaScript入門を終えて「読めるけれど自分では書けない」と感じている方に向いています。

1
初段
01. ボタンで挨拶を出せ15分
02. ダークモード切替15分
03. 文字数カウンター20分
04. メニューの絞り込み25分
2
中段
01. 予約フォームの検証25分
02. 配列からメニューを描画せよ25分
03. タブ切替30分
04. 営業中か準備中かを判定せよ30分
3
師範
01. 時計の表示を整えよ30分
02. 総合 予約ページ完成45分

時計の表示を整えよ

師範 / 目安 30分

「ヘッダーに時計が欲しいの。秒まで動くやつ」と陽葵さん。「カフェって時間が大事だから。あと5分で焼き上がり、とか」

時計は2つの部品でできています。1つは 1秒ごとに動かす仕掛け、もう1つは 時分秒をきれいな文字に整える処理 です。この2つを混ぜて書くと、途端に確かめられなくなります。前の問題と同じ話です。動かす仕掛けの中に整形が埋まっていると、正しく整形できているかは実際に1秒待たないと分かりません。

そこで、整形のほうを formatClock(h, m, s) として切り出します。時・分・秒を受け取り、09:05:03 の形の文字列を返す関数です。これなら好きな値を渡して一瞬で確かめられます。

整形でつまずくのはゼロ埋めです。5時3分は 5:3 ではなく 05:03 と書きたい。数を2桁にそろえるには String(m).padStart(2, "0") を使います。数のままでは padStart は使えないので、いったん String() で文字にしてから渡します。

HTML は読み取り専用です。整形を確かめるためのボタンを置いてあるので、押されたら data-h data-m data-s の3つを formatClock に渡して #clock に出してください。dataset で読んだ値は文字列なので、数として扱うなら Number() を通します。

そして仕上げに、setInterval で1秒ごとに現在時刻を formatClock に渡し、時計として動かしてください。動かす仕掛けと整形が分かれていれば、つなぐのは1行です。

完成条件

  • formatClock(h, m, s) を作る。09:05:03 のように 2桁ずつコロンでつないだ文字列 を返す
  • .time-button のすべてにクリックのイベントを付ける
  • 押されたら data-h data-m data-s を数にして formatClock に渡し、#clock に出す
  • setInterval を使い、1秒ごとに現在時刻を formatClock に渡して #clock を更新する

進め方

白紙から書いてください。手が止まったらヒントを開けます。ヒントは3段階で、①方針、②使う構文、③部分解の順に出ます。1つも開けずに通せたら、その問題は自分のものです。

課題

  1. formatClock(h, m, s) を作り、09:05:03 の形の文字列を返す
  2. 1桁の数はゼロ埋めして2桁にそろえる
  3. すべての .time-button にクリックのイベントを付ける
  4. 押されたら data-h と data-m と data-s を数にして formatClock に渡し、#clock に出す
  5. setInterval で1秒ごとに現在時刻を formatClock に渡し、#clock を更新する

ヒント

前のヒントを開くと次が開きます。開かずに解けると未開封クリアです

①方針 整形と、1秒ごとに動かす仕掛けを分けます。`formatClock(h, m, s)` が文字列を返すところまで作れば、時計にするのは最後の数行です

ヒント 2ヒント 1 を開くと読めます
ヒント 3ヒント 2 を開くと読めます
index.html
style.css
script.js
プレビュー

できているか

  • 9時5分3秒が 09:05:03 とゼロ埋めされて出る
  • 18時42分7秒が 18:42:07 と出る
  • 0時0分0秒が 00:00:00 と出る
エディタを読み込んでいます