JavaScript

【基礎から学ぶ】JavaScriptのクリック【実例3パターン】

【基礎から学ぶ】JavaScriptのクリック【実例3パターン】

今回はフロントエンド開発の時に良く実装されるクリックイベントについて話をしていきます。

このボタンを押したらクリックしたら、表示を切り替えたいなー

ここの部分一回クリックしたら2回目以降はクリックできないようにしたいなー

上記以外にも、特定の要素をクリックしたら「こういう動きつけたいなー」などと思っている方も多いのではないでしょうか?

今回の記事ではクリック処理をこれから初めて実装する人に向けて「イベント」の基本から、実際にWebページ開発でよく使われるイベントである「クリック」についてサンプルコードを交えて説明します。

この記事の内容
  • イベントとは
  • addEventListenerでイベントを登録する
  • 開発によく使われるクリック処理3パターン

「クリック」イベントの実装サンプルだけ参考にしたい方は一番最後の項目である「開発によく使われるクリック処理3パターン」まで飛ばして読んでいただけたらと思います。

イベントとは

今回の話は主に「クリック(click)」について解説していきますが、その前に理解しておきたい「イベント(event)」という概念について説明します。

フロントエンド・バックエンド問わず、Web開発をしていると「イベント」という言葉を耳にします。

フロントエンドの場合のイベントとは次のものになります。

フロントエンドのイベント例
  • マウスをクリックする
  • マウスを動かす
  • Webページのスクロールする
  • キーボードを打ち込む
  • ブラウザサイズを変更する
  • Webページの読み込みが終わる

上記のイベント例以外にも20を超えるイベントが存在します。

このイベント例を元にイベントとは何かを定義すると、大きく分けて次の2種類に分けられます。

イベント定義
  1. ユーザー起因による操作: マウス操作やキーボード操作など
  2. ブラウザ起因による動作: Webページの読み込み完了、画像の読み込み完了など

この「イベント」という概念を理解すれば次に説明する「addEventListener」の理解がしやすいかと思います。

addEventListenerでイベントを登録する

前回の章で説明したイベントを追加するためには、「addEventListener」というものを使います。

言葉から意味を理解する

言葉の意味から理解すると頭にスッと入ると思うので、まずはそれぞれの単語を分解して意味を確認しましょう。

  • add(追加する)
  • Event(イベント(クリックやファイル読み込み完了など))
  • Listener(リスナー(イベントを検知した時に実行する処理))

「add」と「Event」に関しては名前から意味を推測することは出来ますが、最後の「Listener」とは何を表しているでしょうか?

ここでいう「Listener」とは、「処理そのもの」を指しています。

「addEventListener」を訳すと「イベント処理を追加する」という意味になります。

addEventListenerに必要なもの

「addEventListener」を使うためには最低限次の3つが必要です。

addEventListenerで必要な3つ
  1. Eventターゲット
  2. イベントの種類
  3. イベントが検知されたときに実行する処理

上記の3つ以外にセット出来るものは、以下ドキュメントの「options」になります。

しかし、「options」に関しては利用する場面が少ないので今回は割愛しますが、別の記事で解説する予定です。

Eventターゲット

EventターゲットになるものはDOMや、ブラウザのWindowオブジェクトなど様々です。

  • DOM(Document Object Model) : ボタン・画像・文字などをJavaScriptで操作できるようにHTML要素
  • Windowオブジェクト : DOM含め、その他にもconsoleやalertなどブラウザが提供している機能を保持するオブジェクト

イベントの種類 (click, load など)

「イベントの種類」はその名通り、「click」「load」「mousemove」など「イベントの名前」になります。

どんなイベントが利用できるかは「MDNのEvent.addEventListener()」のドキュメントページ画面左にある「イベント」の項目から確認することが出来ます。

イベントが検知されたときに実行する処理

「イベントが検知されたときに実行する処理」とは「関数(function)」のことです。

addEventListenerの使い方

addEventListenerで必要な3つ
  1. Eventターゲット : (DOM, Windowオブジェクト)
  2. イベントの種類 : (click, load, mousemove)
  3. イベントが検知されたときに実行する処理 (関数(function))

それでは先程お話した必要な3つ項目を使って「addEventListener」をどのように使うかコードを使って説明します。

 

上記コードを実際に実行した結果

クリックイベントサンプル上記サンプルコードの実行結果

 

2つ目のサンプルコードがJavaScriptのコードになります。

JavaScriptのコードの2行目で「EventTarget」を取得しています。今回の場合は「h1」要素を「EventTarget」としました。

次に6行目で「addEventListener」を使って「EventTarget」をクリックしたときの処理をセットしています。

「addEventListener」の引数は次のようになります。

addEventListenerの引数
  • 第1引数にはイベントの種類をセット。今回の場合は「click」をセットした。
  • 第2引数にはリスナー(イベントが検知されたときに実行する処理=関数)をセット。

サンプルコードのコメントにも書いていますが、「リスナー」=「コールバック関数」となります。そして、今回のコールバック関数には「無名関数」を使っています。

「コールバック関数」「無名関数」については別記事で説明しているので、以下の記事を参考にしていただけたらと思います。

上記のサンプルコードの内容を元に、addEventListenerの使い方をまとめると以下のようになります。

①Eventターゲット.addEventListener(②イベントの種類, ③イベントが検知されたときに実行する処理)

実行結果を示したアニメーション画像を確認していただくと、h1要素をクリックした時に、アラートが表示されているのがわかるかと思います。

それは10行目にて「alert」メソッドを実行しているからです。

この「alert」は「③イベントが検知されたときに実行する処理」の中で定義されているので、クリックした時にアラートが実行されるのです。

開発によく使われるクリック処理3パターン

今までの章で「addEventListener」の使い方について説明してきました。

ここからは実際に開発でよく使われるクリック処理のパターン3つをサンプルコードを交えて解説していきます。

クリック時に実行したい関数に正しい引数をセットしたい

次のサンプルコードで、「正しい使い方」「誤った使い方パターン1」「誤った使い方パターン2」の3種類を用意しました。

今回のサンプルコードのシナリオは次のとおりです。

サンプルコードのシナリオ
  • イベントターゲットがクリックされたら「receiveNumber」関数を実行したい
  • receiveNumber関数には数値の「1」を渡したい

まずは8行目の「正しい使い方パターン」から説明します。

10行目のaddEventListenerの第2引数であるリスナーには「receiveNumber」関数をセットしておらず、無名関数をセットしています。

そして、無名関数内で「receiveNumber」関数を実行しています。

なぜ「addEventListener」の第2引数に直接「receiveNumber」をセットしなかったのでしょうか?

その答えは15行目の「誤った使い方パターン1」のコメント内容を読むとわかります。

「addEventListener」の第2引数にセットされるリスナー(=コールバック関数)は引数にEventオブジェクトを受け取ります。

そのため、もし直接「receiveNumber」関数を「addEventListener」の第2引数に渡してしまうと、「receiveNumber」は数値ではなくEventオブジェクトを受け取ります。

それでは24行目の「誤った使い方パターン2」はどうでしょうか?

こちらは「receiveNumber」関数を実行した結果をセットしているので、今回の場合だと「undefined」がセットされます。

そのためイベントターゲットがクリックされても何も実行されることはありません。

これら2つの誤った使い方は初心者がよく陥るミスになるので気をつけましょう。

1回しかクリックできないボタンを作る

正しい使い方パターンと誤った使い方パターンの2つに分けてサンプルコードを使って説明していきます。

まずは誤った使い方パターンから。

まず「addEventListener」で登録したリスナーは「removeEventListener」というメソッドを使って削除します。

使い方は基本的に「addEventListener」と同じで以下のようになります。

removeEventListenerの引数
  • 第1引数にはイベントの種類をセット。今回の場合は「click」をセットした。
  • 第2引数には「addEventListenerでセットした」リスナーをセット。

第2引数の「addEventListenerでセットした」リスナーが「removeEventListener」のキモとなります。

上記サンプルコードの9行目と12行目で「addEventListener」「removeEventListener」のそれぞれの第2引数に「clickOnce」関数をセットしています。

しかし「clickOnce」関数は「addEventListener」と「removeEventListener」で別々でコールバック関数として定義しているので、異なる関数となります。

そのため、removeEventListenerが意図したとおりに動かず何回もクリック時の処理が実行されてしまいます。

実行結果は次の画像のとおりです。

removeEventListenerを誤って使ったときの結果removeEventListenerを誤って使ったときの結果

 

それでは次に正しい使ったときのコードを確認しましょう。

「removeEventListener」を正しく使ったサンプルコードの場合は、clickOnceという関数を1つだけ用意しました。

「addEventListener」「removeEventListener」でこの同一の「clickOnce」関数を参照しています。

一度クリックした場合「removeEventListener」が実行されて、2回目以降のクリックは実行されません。

上記サンプルコードの実行結果は次の画像のとおりです。

removeEventListenerを正しく使った結果removeEventListenerを正しく使った結果

1回クリックしたら一定期間クリックできないボタンを作る

最後に一定の時間クリック処理を無効にするやり方をサンプルコードを使って説明します。

この機能が使われる場面は、非同期通信を使うところが考えられます。(例えばTwitter、Facebookのタイムラインの続きのデータを取得するなど。)

非同期通信が開始したときは一連の処理が終わるまでは、クリックイベントを無効にしたい場面がよくあります。

それでは次のサンプルコードを確認してみましょう。

サンプルコードでは「setTimeout」メソッドを使って擬似的に非同期通信を再現しました。

上記のコードでは「canClick」というフラグを使って、クリック時の処理を最後まで実行するか途中で中断するか判断しています。

今回の例だと、一度クリックしたらcanClickフラグをfalseにしており、2秒後にフラグをtrueに戻すことで2秒間ボタンが効かない時間を作っています。

サンプルコードの実行結果は次の画像のとおりです。

一定期間クリックを無効にする一定期間クリックを無効にする

まとめ

ここまで、フロントエンド開発でよく使われるクリック時の処理を実装するために必要な知識を説明していきました。

今回の内容をまとめると次のとおりです。

今回の記事のまとめ
  • Web開発には「イベント」という概念が重要
  • イベント」の種類の1つに「クリック(click)」がある
  • addEventListener」という機能を使ってクリック時の処理を登録する
  • 開発でよく使われるクリック処理の3パターンを解説した

もし今回の記事が「役に立った」「参考になった」と思っていただけたらシェアしていただけると泣いて喜びます!

【3つの特典付き】Webエンジニアに必要な基礎スキルを体系的に効率良く身につけたいですか?

LINE登録で無料特典を受け取る

次のような方向けに、学習をサポートするコンテンツを無料プレゼントしています。

  • Webエンジニアになりたいけど何から学習を始めれば良いかわからない
  • 今まで独学で頑張ってきたけど、独学に限界を感じてきた
  • プログラミングは出来るけど、大きめのコードが書けない

「プレゼント詳細が知りたい」「プレゼントを受け取りたい」といった方は、以下のボタンをクリックして詳細ページをご確認ください。

無料特典を受け取る

 

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です