まるでプロ!JavaScriptで矢印キーイベントを制御する9つの手法

JavaScriptで矢印キーイベントを制御するイメージJS
この記事は約15分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

この記事を読めば、JavaScriptで矢印キーイベントを制御する方法を習得し、矢印キーを活用したアプリケーション開発ができるようになります。

●JavaScriptと矢印キーイベントとは

JavaScriptは、ウェブページにインタラクティブな要素を追加するために使用されるプログラミング言語です。

矢印キーイベントは、キーボードの矢印キーを押すことで発生するイベントのことを指します。

ウェブページ上で矢印キーを使用して要素を操作したり、ゲームのキャラクターを動かしたりする際に、矢印キーイベントを利用します。

○矢印キーイベントの基本

矢印キーイベントは、主に「keydown」、「keyup」、「keypress」といった3つのイベントタイプがあります。

「keydown」はキーが押された瞬間に発生し、「keyup」はキーが離された瞬間に発生します。

「keypress」はキーが押され続けている間、繰り返し発生します。

これらのイベントタイプを利用して、矢印キーの操作に応じてウェブページ上の要素を制御することができます。

●矢印キーイベントの作り方

JavaScriptで矢印キーイベントを扱うには、イベントリスナーを使用します。

イベントリスナーは、特定のイベントが発生したときに実行される関数を指定することができます。

○サンプルコード1:矢印キーイベントの基本的な使い方

document.addEventListener('keydown', function(event) {
  if (event.key === 'ArrowUp') {
    console.log('上矢印キーが押されました。');
  } else if (event.key === 'ArrowDown') {
    console.log('下矢印キーが押されました。');
  } else if (event.key === 'ArrowLeft') {
    console.log('左矢印キーが押されました。');
  } else if (event.key === 'ArrowRight') {
    console.log('右矢印キーが押されました。');
  }
});

このサンプルコードでは、keydownイベントが発生したときに、矢印キーの種類に応じてコンソールにメッセージが表示されます。

○サンプルコード2:矢印キーで画像を動かす

<!DOCTYPE html>
<html>
<head>
<style>
  #image {
    position: absolute;
    left: 0;
    top: 0;
  }
</style>
</head>
<body>
  <img id="image" src="画像ファイルのURL" alt="画像">
  <script>
    const image = document.getElementById('image');
    document.addEventListener('keydown', function(event) {
      const step = 10; // 画像を動かす距離(ピクセル)

      if (event.key === 'ArrowUp') {
        image.style.top = parseInt(image.style.top) - step + 'px';
      } else if (event.key === 'ArrowDown') {
        image.style.top = parseInt(image.style.top) + step + 'px';
      } else if (event.key === 'ArrowLeft') {
        image.style.left = parseInt(image.style.left) - step + 'px';
      } else if (event.key === 'ArrowRight') {
        image.style.left = parseInt(image.style.left) + step + 'px';
      }
    });
  </script>
</body>
</html>

このサンプルコードでは、矢印キーを押すと、指定された画像が上下左右に動きます。画像の移動距離はstep変数で指定されています。

●矢印キーイベントの応用例

矢印キーイベントは、さまざまなウェブページやアプリケーションで利用できます。

下記に、いくつかの応用例を紹介します。

○サンプルコード3:矢印キーでキャラクターを操作するゲーム

このサンプルコードは、矢印キーを使用してキャラクターを操作するシンプルなゲームの例です。

キャラクターの移動速度や当たり判定など、ゲームの仕様に応じてカスタマイズが可能です。

<!DOCTYPE html>
<html>
<head>
<style>
  #character {
    position: absolute;
    left: 0;
    top: 0;
  }
</style>
</head>
<body>
  <img id="character" src="キャラクター画像のURL" alt="キャラクター">
  <script>
    const character = document.getElementById('character');
    document.addEventListener('keydown', function(event) {
      const step = 10;

      if (event.key === 'ArrowUp') {
        character.style.top = parseInt(character.style.top) - step + 'px';
      } else if (event.key === 'ArrowDown') {
        character.style.top = parseInt(character.style.top) + step + 'px';
      } else if (event.key === 'ArrowLeft') {
        character.style.left = parseInt(character.style.left) - step + 'px';
      } else if (event.key === 'ArrowRight') {
        character.style.left = parseInt(character.style.left) + step + 'px';
      }
    });
  </script>
</body>
</html>

○サンプルコード4:矢印キーでスライドショーを操作する

このサンプルコードでは、矢印キーを使ってスライドショーを操作します。

左矢印キーで前のスライドに戻り、右矢印キーで次のスライドに進みます。

スライドのループも考慮されています。

<!DOCTYPE html>
<html>
<head>
<style>
  .slide {
    display: none;
  }
  .active {
    display: block;
  }
</style>
</head>
<body>
  <img class="slide active" src="画像1のURL" alt="画像1">
  <img class="slide" src="画像2のURL" alt="画像2">
  <img class="slide" src="画像3のURL" alt="画像3">
  <script>
    const slides = document.getElementsByClassName('slide');
    let activeIndex = 0;

    function changeSlide(index) {
      slides[activeIndex].classList.remove('active');
      activeIndex = index;
      slides[activeIndex].classList.add('active');
    }

    document.addEventListener('keydown', function(event) {
      if (event.key === 'ArrowLeft') {
        const newIndex = activeIndex === 0 ? slides.length - 1 : activeIndex - 1;
        changeSlide(newIndex);
      } else if (event.key === 'ArrowRight') {
        const newIndex = activeIndex === slides.length - 1 ? 0 : activeIndex + 1;
        changeSlide(newIndex);
      }
    });
  </script>
</body>
</html>

○サンプルコード5:矢印キーでフォームの入力を補完する

このサンプルコードでは、矢印キーでフォームの入力を補完します。

上矢印キーで前の候補に移動し、下矢印キーで次の候補に移動します。

Enterキーを押すと、選択中の候補がフォームに入力されます。

<!DOCTYPE html>
<html>
<head>
<style>
  #suggestion {
    display: none;
  }
</style>
</head>
<body>
  <input id="input" type="text">
  <div id="suggestion"></div>
  <script>
    const input = document.getElementById('input');
    const suggestion = document.getElementById('suggestion');
    const suggestions = ['サンプル1', 'サンプル2', 'サンプル3', 'サンプル4', 'サンプル5'];
    let activeSuggestion = -1;

    function showSuggestion() {
      if (activeSuggestion === -1) {
        suggestion.style.display = 'none';
      } else {
        suggestion.style.display = 'block';
        suggestion.textContent = suggestions[activeSuggestion];
      }
    }

    input.addEventListener('keydown', function(event) {
      if (event.key === 'ArrowUp') {
        activeSuggestion = activeSuggestion === -1 ? suggestions.length - 1 : activeSuggestion - 1;
        showSuggestion();
      } else if (event.key === 'ArrowDown') {
        activeSuggestion = activeSuggestion === suggestions.length - 1 ? -1 : activeSuggestion + 1;
        showSuggestion();
      } else if (event.key === 'Enter' && activeSuggestion !== -1) {
        input.value = suggestions[activeSuggestion];
        activeSuggestion = -1;
        showSuggestion();
      }
    });
  </script>
</body>
</html>

●注意点と対処法

矢印キーイベントを使用する際には、次の注意点があります。

  1. ブラウザのデフォルトの動作と競合する可能性があります。
    例えば、上下矢印キーは通常、ページのスクロールに使用されます。
    競合を防ぐために、event.preventDefault() を使用してデフォルトの動作をキャンセルすることができます。
  2. 矢印キーイベントは、キーボード操作に依存するため、アクセシビリティの観点から問題がある場合があります。
    スクリーンリーダーや音声入力ソフトウェアを使用しているユーザーは、矢印キーイベントを利用できない場合があります。
    この問題に対処するために、代替の操作方法を提供することが重要です。

●カスタマイズ方法

さらなるカスタマイズが必要な場合は、下記のサンプルコードを参考にしてください。

○サンプルコード6:矢印キーで複数の要素を同時に操作する

このサンプルコードでは、矢印キーを使用して複数の要素を同時に操作する方法を説明します。

次に示すコードは、矢印キーによって2つの要素(element1とelement2)を同時に移動させる例です。

// HTMLの要素を取得
const element1 = document.getElementById('element1');
const element2 = document.getElementById('element2');

// 矢印キーで要素を移動する関数
function moveElement(element, x, y) {
  element.style.transform = `translate(${x}px, ${y}px)`;
}

// イベントリスナーを設定
document.addEventListener('keydown', function(event) {
  const arrowKeys = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'];
  if (arrowKeys.includes(event.key)) {
    // 矢印キーが押されたときの処理
    // element1とelement2の両方を同時に移動させる
    switch (event.key) {
      case 'ArrowUp':
        moveElement(element1, 0, -10);
        moveElement(element2, 0, -10);
        break;
      case 'ArrowDown':
        moveElement(element1, 0, 10);
        moveElement(element2, 0, 10);
        break;
      case 'ArrowLeft':
        moveElement(element1, -10, 0);
        moveElement(element2, -10, 0);
        break;
      case 'ArrowRight':
        moveElement(element1, 10, 0);
        moveElement(element2, 10, 0);
        break;
    }
  }
});

○サンプルコード7:矢印キーで特定の条件下でのみイベントを実行する

このサンプルコードでは、特定の条件が満たされた場合にのみ、矢印キーイベントを実行する方法を示しています。

次のコードは、上矢印キーが押されたときに、特定の条件が満たされている場合のみ、処理を実行する例です。

document.addEventListener('keydown', function(event) {
  if (event.key === 'ArrowUp' && 特定の条件) {
    // 上矢印キーが押されたときの処理
  }
});

○サンプルコード8:矢印キーで要素のスクロールを制御する

このサンプルコードでは、矢印キーを使用して特定の要素のスクロールを制御する方法を説明します。

以下のコードは、上矢印キーが押されたときにスクロール可能な要素(scrollableElement)のスクロール位置を上に移動し、下矢印キーが押されたときにスクロール位置を下に移動させる例です。

// スクロール可能な要素を取得
const scrollableElement = document.getElementById('scrollableElement');

// イベントリスナーを設定
document.addEventListener('keydown', function(event) {
  // 上矢印キーが押されたときの処理
  if (event.key === 'ArrowUp') {
    scrollableElement.scrollTop -= 10;
  }
  // 下矢印キーが押されたときの処理
  else if (event.key === 'ArrowDown') {
    scrollableElement.scrollTop += 10;
  }
});

このサンプルコードでは、矢印キーで特定の要素のスクロール位置を制御しています。

上矢印キーが押されたときには、スクロール位置を上に移動させ、下矢印キーが押されたときには、スクロール位置を下に移動させます。

このようにして、ユーザーが矢印キーでスクロール操作を行えるようになります。

まとめ

矢印キーイベントを利用することで、様々な操作を実現することができます。

要素の移動やスクロール制御、条件下でのイベント実行など、用途は多岐にわたります。

サンプルコードを参考にして、自分のプロジェクトに適した矢印キーイベントの実装を試みてみてください。

ただし、注意点やカスタマイズ方法にも留意して、効果的かつユーザーフレンドリーな操作を実現しましょう。