JavaScript - イベントオブジェクト - function(e) の e とは?

function(e) の e はイベントオブジェクトを受け取るための変数です。イベントオブジェクトにアクセスして、押されたキーの種類やマウスポインターの座標などの情報を取得できるようになりましょう。

JavaScript - イベントオブジェクト - function(e) の e とは?
Photo by Greg Rosenke / Unsplash

function(e) の e とは?

JavaScript コードで、e が使われているのを見たことはありますか?たとえば下のコードでは、changeColor(e)e.targete が使われていますね。

// イベントハンドラー
function changeColor(e) {
  let randomColor = '#' + (Math.floor(Math.random() * 16777215).toString(16));
  e.target.style.backgroundColor = randomColor;
}

この e は、イベントオブジェクトを表しています。イベントハンドラー関数にイベントオブジェクトを引数として渡すと、発生したイベントに関する情報を利用できるようになります。

今回は、function(e) を使った簡単なコードを例にしながら、イベントオブジェクトについて解説していきます。

JavaScript のオブジェクトについては、以下の記事をご覧ください。

JavaScript - オブジェクトの基本【初心者向け】
この記事では、オブジェクトとは何か、プロパティやメソッドの意味、オブジェクトを作る方法であるオブジェクトリテラルとコンストラクタについて、初心者向けに簡単に紹介します。

イベントオブジェクトとは?

イベントオブジェクトは、発生したイベントの詳細情報を持つオブジェクトです。イベントオブジェクトは引数としてイベントハンドラーに渡されます。

イベントとは、「ボタンがクリックされた」「キーボードのキーが押された」など、ウェブページで起こる出来事のことですね。イベントハンドラーは、イベントが発生したときに実行される関数です。

イベントやイベントハンドラーについては、こちらの記事を参考にしてください。

JavaScript - ボタンクリックでメッセージを表示する方法【初心者向け】
ユーザーの操作をきっかけに動く JavaScript の書き方を紹介します。ボタンのクリックに反応するシンプルなコードを書きながら、要素の取得やイベント、イベントハンドラーやイベントリスナーなどの基本を解説します。

e は event の省略形

イベントハンドラーの e は、イベントオブジェクトを受け取るためのパラメータです。パラメータには好きな名前をつけることができますが、event を省略した e で表すのが一般的です。

イベントハンドラーのパラメータに e を指定することで、イベントオブジェクトが持つさまざまな情報 (プロパティ) にアクセスできるようになるのです。

パラメータについては、こちらの記事を参考にしてください。

JavaScript - 関数の基本 - 関数宣言と関数式【初心者向け】
プログラミングをする際、関数の知識は欠かせません。関数を使えば、同じコードを何度も書くことなく特定の処理を実行できるようになります。関数の書き方、パラメータや引数、return 文や戻り値、巻き上げなどの意味を学びましょう。

いろいろなイベントオブジェクト

イベントオブジェクトが持つプロパティは、発生するイベントによって異なります。2つのイベントを例にして、プロパティの違いを見てみましょう。下のようなイベントハンドラー関数 logEvent を定義して、プロパティの違いを確認していきますよ。

// イベントハンドラー
function logEvent(e) {
  console.log(e);
}

KeyboardEvent オブジェクト

何かのキーが押されたときに発生する keydown イベントでは、KeyboardEvent というイベントオブジェクトが作られます。これには、押されたキーの文字情報などが含まれます。

下のコード例では、入力欄にキーボードで何かが入力されたときに KeyboardEvent オブジェクトが作られ、引数としてイベントハンドラー logEvent に渡されます。

const input = document.querySelector('input');

// イベントハンドラー
function logEvent(e) {
  console.log(e);
}

input.addEventListener('keydown', logEvent);

コンソール出力結果は下のようになります。keydown イベントによって作られたオブジェクトには、keycode など、キーの種類を表すプロパティが含まれていることが分かりますね。

Object {isTrusted: true, key: "a", code: "KeyA", location: 0, ctrlKey: false…}

MouseEvent オブジェクト

何かがクリックされたときに発生する click イベントでは、MouseEvent というイベントオブジェクトが作られます。これには、クリックされた座標情報などが含まれます。

下のコード例では、ボタンがクリックされたときに MouseEvent オブジェクトが作られ、引数としてイベントハンドラー logEvent に渡されます。

const button = document.querySelector('button');

// イベントハンドラー
function logEvent(e) {
  console.log(e);
}

button.addEventListener('click', logEvent);

コンソール出力結果は下のようになります。click イベントによって作られたオブジェクトには、screenXscreenY など、座標のプロパティが含まれていることが分かりますね。

Object {isTrusted: true, screenX: 597, screenY: 56, clientX: 38, clientY: 17…}

次のセクションでは、イベントオブジェクトを使った簡単なプロジェクトを紹介します。function(e)e がどのように役立つのか、動きとコードを見ながら理解を深めていきましょう。

押されたキーの文字を取得する

KeyboardEvent オブジェクトの key プロパティを使ったプロジェクトを試してみてください。入力欄をクリックしてからキーボードのキーを押すと、押されたキーの種類が表示されます。

See the Pen JavaScript - KeyboardEvent key property by Pyxofy (@pyxofy) on CodePen.

  • ① キーボードのキーを押すとkeydown イベントが発生し、KeyboardEvent オブジェクトが作られます。
  • KeyboardEvent オブジェクトは、イベントハンドラーに引数として渡されます。
  • KeyboardEvent オブジェクトの key プロパティにアクセスすることで、押されたキーの種類を取得できます。
const input = document.querySelector('input');
const text = document.querySelector('h3');

// イベントハンドラー
function showKeyValue(e) { // ②
  let key = e.key; // ③
  text.textContent = '押されたキーは ' + key + ' です';
}

input.addEventListener('keydown', showKeyValue); // ①

マウスポインターの座標を取得する

MouseEvent オブジェクトの screenX プロパティと screenY プロパティを使ったプロジェクトを試してみてください。正方形のエリア内でマウスを動かすと、マウスポインターの座標が表示されます。

See the Pen JavaScript - MouseEvent screenX screenY property by Pyxofy (@pyxofy) on CodePen.

  • ① マウスポインターを動かすとmousemove イベントが発生し、MouseEvent オブジェクトが作られます。
  • MouseEvent オブジェクトは、イベントハンドラーに引数として渡されます。
  • MouseEvent オブジェクトの screenX プロパティや screenY プロパティにアクセスすることで、マウスポインターの座標を取得できます。
const area = document.querySelector('.container');
const text = document.querySelector('h3');

// イベントハンドラー
function showCoords(e) { // ②
  let x = e.screenX; // ③
  let y = e.screenY; // ③
  let coordinates = 'X 座標: ' + x + ' / Y 座標: ' + y;
  text.textContent = coordinates;
}
// イベントハンドラー
function clearCoords() {
  text.textContent = 'エリア内に戻ってください';
}

area.addEventListener('mousemove', showCoords); // ①
area.addEventListener('mouseout', clearCoords);

このコードにはイベントハンドラー関数が2つありますね。ひとつはパラメータ e を指定し、もうひとつは e を指定していません。違いは次のとおりです。

  • function showCoords(e):イベントハンドラー showCoords は、マウスポインターの座標を表示する関数です。パラメータとして e が指定されているので、イベントオブジェクトが持つ座標プロパティにアクセスすることが可能です。
  • function clearCoords():イベントハンドラー clearCoords は、文字列を変更する関数です。イベントオブジェクトの詳細情報にアクセスする必要がないので、パラメータ e は指定されていません。

まとめ

今回は、JavaScript のイベントオブジェクトについて紹介しました。

発生したイベントの情報を格納しているのがイベントオブジェクトです。「クリックされた要素は何?」「どのキーが押された?」「ポインターの座標はどこ?」など、イベントの詳細情報を知りたいときは、 イベントハンドラー関数にパラメータ e を指定します。eevent を省略したもので、イベントオブジェクトが持つさまざまな情報にアクセスするために使われる変数だということを覚えておきましょう。

最後まで読んでいただき、ありがとうございます。この記事をシェアしてくれると嬉しいです!

こちらもチェック! X (Twitter) @pyxofyLinkedInMastodonFacebook

関連記事

JavaScript - お絵描きアプリの作り方【基本編】
HTML のキャンバス <canvas> と JavaScript でシンプルなお絵描きアプリを作ります。線の描画機能と消去ボタンのみの最低限のコードで、自由に描画するための基本的な方法を学びましょう。
CSS Art
Articles for creating CSS Art.
CSS Animation
Articles for creating CSS Animation.
スクラッチプログラミング - イベントとは?プログラムをうごかすあいず
イベントをあらわすブロックについてしょうかいします。イベントがないと、せっかくつくったプログラムもうごきません!いろいろなイベントブロックをつかった、かんたんなプロジェクトを一緒(いっしょ)につくってみましょう!