目次⇒ 基本のカウントアップ イベントリスナーの書き方比較 機能追加(リセット/−1/+10) 条件付きの動作(偶数/奇数で色分け) localStorageで保存する応用 ミニゲーム:10カウント! TOP
この記事では、dom操作やイベント処理など、JavaScript / TypeScriptと紹介した記事の内容を活用したコーディング例を紹介します。
今回は、カウントアップボタン+αを実装する例を紹介します。
解説:
クリックするたびに数値が増えていくカウントアップボタンを作ってみましょう。
シンプルな例ですが、イベントリスナーとDOM更新の基礎を学ぶのに最適です。
まずは最小限のHTMLとJavaScriptで、ボタンを押すたびに1ずつ数値が増える仕組みを実装します。
まずはボタンと数値表示用の要素を用意します。
<!-- HTML -->
<button id="countBtn">クリックしてカウント</button>
<div id="counter">0</div>
<!-- JavaScript -->
<script>
const btn = document.getElementById('countBtn');
const counter = document.getElementById('counter');
let count = 0;
btn.addEventListener('click', () => {
count++;
counter.textContent = count;
});
</script>このコードの流れは以下の通りです。
下のボタンをクリックして、数値が増えるのを確認してください。
解説:
JavaScriptでクリックイベントを設定する方法は、主にonclickプロパティとaddEventListenerの2種類があります。
どちらも「クリックすると処理を実行する」点は同じですが、書き方や拡張性に違いがあります。
ボタン要素の onclick プロパティに直接関数を代入する方法です。
シンプルで書きやすい反面、1つの処理しか登録できない制限があります。
<button id="btn1">onclickでカウント</button>
<div id="result1">0</div>
<script>
const btn1 = document.getElementById('btn1');
const result1 = document.getElementById('result1');
let count1 = 0;
btn1.onclick = () => {
count1++;
result1.textContent = count1;
};
</script>
addEventListener を使うと、同じイベントに複数の処理を追加できます。
さらに、イベントの削除やオプション設定(例:{ once: true })も可能です。
そのため、実務や応用では addEventListener の利用が推奨されます。
<button id="btn2">addEventListenerでカウント</button>
<div id="result2">0</div>
<script>
const btn2 = document.getElementById('btn2');
const result2 = document.getElementById('result2');
let count2 = 0;
// 1つ目のイベント
btn2.addEventListener('click', () => {
count2++;
result2.textContent = count2;
});
// 2つ目のイベント(同時に登録可能)
btn2.addEventListener('click', () => {
console.log('クリックされました!');
});
</script>
解説:
基本のカウントアップに、リセット・−1・+1・+10 の4機能を追加して、
複数ボタンとイベント処理、表示更新のパターンを練習します。
ボタンが増えても、処理のコアはカウント変数の更新と表示の更新の2点だけです。
4つのボタンと、現在値を表示する要素を用意します。
<div class="counter-extend">
<div class="counter-display" id="counterEx">0</div>
<div class="counter-actions">
<button type="button" id="btnMinus">−1</button>
<button type="button" id="btnPlus1">+1</button>
<button type="button" id="btnPlus10">+10</button>
<button type="button" id="btnReset">リセット</button>
</div>
</div>
クリックされたボタンごとにカウントを更新し、最後に表示を変更します。
表示更新は関数にしておくと、再利用しやすくなります。
// 要素取得
const counterEl = document.getElementById('counterEx');
const btnMinus = document.getElementById('btnMinus');
const btnPlus1 = document.getElementById('btnPlus1');
const btnPlus10 = document.getElementById('btnPlus10');
const btnReset = document.getElementById('btnReset');
let count = 0;
// 表示更新の共通関数
function render() {
counterEl.textContent = count;
}
// 各ボタンの処理
btnMinus.addEventListener('click', () => {
count -= 1;
render();
});
btnPlus1.addEventListener('click', () => {
count += 1;
render();
});
btnPlus10.addEventListener('click', () => {
count += 10;
render();
});
btnReset.addEventListener('click', () => {
count = 0;
render();
});
// 初期表示
render();
下のデモで、各ボタンの挙動を試せます。
−1 / +1 / +10 / リセットの各ボタンが、それぞれの機能で動作します。
解説:
カウントアップに「条件分岐」を使うと、値に応じた動作の切り替えを実装できます。
ここでは「偶数なら青、奇数なら赤」と背景色を変える例を紹介します。
単純な処理ですが、if文による条件分岐やスタイル操作を練習する題材に最適です。
ボタンをクリックするとカウントが増え、偶数か奇数かで色が変わるようにします。
<!-- HTML -->
<button id="btnColor">カウントアップ</button>
<div id="counterColor">0</div>
<!-- JavaScript -->
<script>
const btn = document.getElementById('btnColor');
const counter = document.getElementById('counterColor');
let count = 0;
function render() {
counter.textContent = count;
if (count % 2 === 0) {
counter.style.background = '#e6f2ff'; // 偶数(青系)
counter.style.color = '#004080';
} else {
counter.style.background = '#ffe6e6'; // 奇数(赤系)
counter.style.color = '#800000';
}
}
btn.addEventListener('click', () => {
count++;
render();
});
render();
</script>
下のボタンをクリックすると、数値が1ずつ増え、
偶数のときは青系、奇数のときは赤系の背景と文字色に変化します。
解説:
これまで作ったカウントアップは、ページをリロードすると値がリセットされてしまいました。
そこで、ブラウザにデータを保存できるlocalStorageを使い、前回の続きからカウントできるようにします。
localStorageはブラウザに永続的に保存されるため、セッションが切れても値を保持できます。
保存した値を起動時に読み込み、更新のたびに保存する処理を追加します。
<!-- HTML -->
<button id="btnStorage">カウントアップ</button>
<div id="counterStorage">0</div>
<!-- JavaScript -->
<script>
const btn = document.getElementById('btnStorage');
const counter = document.getElementById('counterStorage');
// 保存された値を取得(なければ0)
let count = Number(localStorage.getItem('count') || 0);
function render() {
counter.textContent = count;
// 表示更新と同時に保存
localStorage.setItem('count', count);
}
btn.addEventListener('click', () => {
count++;
render();
});
// 初期表示
render();
</script>
下のボタンをクリックしてカウントを進めてみてください。
ページをリロードしても、前回のカウント値から再開されます。
Web Storage には localStorage と sessionStorage の2種類があります。
どちらもキーと値のペアを文字列で保存しますが、保持期間に違いがあります。
| 種類 | 保持期間 | 主な用途 |
|---|---|---|
| localStorage | 明示的に削除するまで保持 (ブラウザ再起動後も残る) |
ログイン状態やアプリ設定など 長期的に保持したいデータ |
| sessionStorage | タブを閉じるまで保持 | 一時的な入力値や セッション単位のデータ |