時計

例1

文字が秒ごとに変わるデジタル時計を作ってみましょう。

上のソースはこれだけです。

<div><input id="out1"></div>

実際に文字を書くJavaScriptの部分は後で挙げます。

例2

普通の文章の中にも のように埋め込めます。

<p>普通の文章の中にも <span id="out2"></span> のように埋め込めます。</p>

実際に文字を書くJavaScriptの部分は後で挙げます。

JavaScript部分

head部分には次のように定義しています。

<script>
function clock() {
  const t = new Date().toLocaleTimeString([], {hour12: false})
  document.getElementById('out1').value = t;    // 例1
  document.getElementById('out2').textContent = t; // 例2
}
setInterval(clock, 1000);
window.addEventListener('DOMContentLoaded', clock);
</script>

window.addEventListener('DOMContentLoaded', clock) は,本文の骨格が読み込まれたすぐ後で clock() を実行するためのものです。

細かなこと

window.addEventListener('load', clock); とすると,ページの骨格だけでなく,画像やスタイルシートなどすべてが読み込まれてから clock() が呼び出されます。

似た書き方として window.onload = clock; があります。こちらは,別の window.onload = ...; があると,最後のものだけが生きます。window.addEventListener() のほうは複数あっても全部が生きます。

<body onload="clock();"> のようにHTMLの要素に onload を書く方法もあります。

こういった実行を遅らせる仕組みを使わなくても,out1out2 が現れた後に

<script>
clock();
</script>

と書くだけでもかまいません。

なお,window.addEventListener('DOMContentLoaded', clock) がなくても,setInterval(clock, 1000); は実行されますので,1000ミリ秒(1秒)たてば時計の実行が開始されます。

応用

時計をちょっと変えれば,ロケット発射のカウントダウンになります。