これまでは、JavaScriptの基本的な文法や、関数を使った処理のまとめ方を学んできました。この章では、イベントという概念を学び、ユーザーの操作に反応するプログラムを作ってみましょう。
1. イベントって何?
イベントとは、ウェブページ上で何かが起こったことを表す仕組みです。例えば、以下のようなものがイベントです。
- ボタンがクリックされた
- マウスカーソルが要素の上に移動した
- キーボードのキーが押された
- フォームの内容が送信された
- ページの読み込みが完了した
これらのイベントが発生したときに、特定の処理を実行するように設定することができます。これを「イベントを捉える」といいます。
イベントを捉えることができれば、ユーザーの操作に応じて、ページの見た目を変えたり、新しい機能を提供したりすることができるようになります。つまり、よりインタラクティブなウェブページを作ることができるのです!
2. イベントを捉える
JavaScriptでイベントを捉えるには、主に以下の2つの方法があります。
- HTMLの属性として設定する
addEventListener
メソッドを使う
ただし、後述しますが、1つ目の方法は古いやり方です。 現在では、2つ目のaddEventListener
メソッドを使う方法が推奨されています。
addEventListener
メソッドを使う
addEventListener
は、特定のHTML要素にイベントリスナーを登録するためのメソッドです。イベントリスナーとは、イベントが発生したときに実行される関数のことです。
addEventListener
の基本的な構文は、以下のとおりです。
javascript
element.addEventListener(イベント名, イベントリスナー関数);
element
: イベントを監視したいHTML要素を指定します。イベント名
: 発生を監視するイベントの名前を文字列で指定します。イベントリスナー関数
: イベントが発生したときに実行する関数を指定します。
例えば、button
というIDを持つボタンがクリックされたときに、handleClick
という関数を実行したい場合は、以下のように書きます。
javascript
const button = document.getElementById("button");
function handleClick() {
console.log("ボタンがクリックされました!");
}
button.addEventListener("click", handleClick);
このコードでは、
document.getElementById("button")
で、button
というIDを持つHTML要素を取得し、button
という変数に格納しています。handleClick
という関数を定義しています。この関数は、コンソールに「ボタンがクリックされました!」と表示するだけの簡単なものです。button.addEventListener("click", handleClick)
で、button
要素にclick
イベントのイベントリスナーを登録しています。click
イベントが発生すると、handleClick
関数が実行されます。
よく使われるイベント
よく使われるイベントには、以下のようなものがあります。
click
: 要素がクリックされたときmouseover
: マウスカーソルが要素の上に乗ったときmouseout
: マウスカーソルが要素の上から離れたときkeydown
: キーボードのキーが押されたときkeyup
: キーボードのキーが離されたときsubmit
: フォームが送信されたときload
: ページや画像などのリソースの読み込みが完了したとき
これらのイベント名をaddEventListener
の第1引数に指定することで、様々なイベントを捉えることができます。
イベントオブジェクト
イベントが発生したとき、イベントリスナー関数にはイベントオブジェクトという特別なオブジェクトが渡されます。イベントオブジェクトには、発生したイベントに関する情報が格納されています。
例えば、click
イベントのイベントオブジェクトには、クリックされた座標や、どのボタンがクリックされたかなどの情報が含まれています。
イベントオブジェクトを使うと、イベントの詳細な情報を取得したり、イベントのデフォルトの動作をキャンセルしたりすることができます。
イベントオブジェクトは、イベントリスナー関数の第1引数として渡されます。慣例的にevent
またはe
という名前の引数で受け取ることが多いです。
javascript
function handleClick(event) {
console.log("クリックされた座標:", event.clientX, event.clientY);
}
この例では、handleClick
関数の引数event
でイベントオブジェクトを受け取り、event.clientX
とevent.clientY
でクリックされた座標を取得しています。