読み込み中...

JavaScriptでフォーカスを制御!10の方法とサンプルコード

JavaScriptでフォーカスを操作する方法を解説するイメージ JS
この記事は約10分で読めます。

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

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

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

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

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

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

はじめに

JavaScriptを使用したフォーカス操作は、ウェブアプリケーションのユーザビリティを向上させる重要な技術です。

本記事では、JavaScriptでフォーカス操作を行う10の方法を初心者向けに詳しく解説します。

サンプルコードを交えながら、使い方や注意点、カスタマイズ方法も学べるので、ぜひ参考にしてみてください。

●JavaScriptとフォーカス操作の基本

フォーカス操作とは、ウェブページ上の要素にキーボードやマウスでアクセスできる領域を制御することを指します。

ユーザーが入力や操作を行いやすくなり、アクセシビリティやユーザビリティが向上することが期待できます。

○フォーカス操作の意義

フォーカス操作は、キーボード操作によるアクセシビリティを向上させるために非常に大切です。

視覚障害者やマウス操作が難しいユーザーにとって、フォーカス操作が適切に設定されていることで、ウェブページをより簡単に利用することができるようになります。

そのため、ウェブ開発者はフォーカス操作の重要性を理解し、適切に実装することが求められます。

●JavaScriptでフォーカスを操作する10の方法

ここからは、JavaScriptでフォーカス操作を行う10の方法をサンプルコード付きで詳しく解説していきます。

各方法の特徴や使い所を理解することで、より効果的なフォーカス操作を実現できるでしょう。

○サンプルコード1:フォーカスを設定する

フォーカスを設定するには、要素の focus() メソッドを使用します。

このメソッドを使うことで、特定の要素に直接フォーカスを当てることができます。

// idが"input1"の要素にフォーカスを設定
document.getElementById("input1").focus();

このサンプルコードでは、idが “input1” の要素にフォーカスを設定しています。

例えば、ページが読み込まれた直後に特定のフォームフィールドにフォーカスを当てたい場合などに有効です。

○サンプルコード2:フォーカスを外す

フォーカスを外すには、要素の blur() メソッドを使用します。

このメソッドは、現在フォーカスが当たっている要素からフォーカスを外すのに役立ちます。

// idが"input1"の要素からフォーカスを外す
document.getElementById("input1").blur();

このサンプルコードでは、idが “input1” の要素からフォーカスを外しています。

例えば、ユーザーが特定の条件を満たさない入力をした場合に、フォーカスを外して別の操作を促すような場面で使用できます。

○サンプルコード3:フォーカスイベントの検出

フォーカスイベントを検出するには、要素にイベントリスナーを追加します。

フォーカスイベントを監視することで、要素がフォーカスされた瞬間に特定の処理を実行できます。

// idが"input1"の要素にフォーカスイベントリスナーを追加
document.getElementById("input1").addEventListener("focus", function() {
  console.log("フォーカスされました。");
});

このサンプルコードでは、idが “input1” の要素にフォーカスイベントリスナーを追加し、フォーカスされたときにコンソールにメッセージが表示されるようになっています。

これにより、フォーカスされたタイミングで追加の処理を実行したり、ユーザーに視覚的なフィードバックを提供したりすることができます。

○サンプルコード4:フォーカス移動の制御

フォーカス移動を制御するには、keydown イベントを利用します。

キーボードの操作に応じてフォーカスの移動を制御することで、ユーザーの操作性を向上させることができます。

// idが"input1"の要素にkeydownイベントリスナーを追加
document.getElementById("input1").addEventListener("keydown", function(event) {
  // Tabキーが押された場合のみ、フォーカス移動を制御
  if (event.key === "Tab") {
    event.preventDefault(); // デフォルトのフォーカス移動をキャンセル
    document.getElementById("input2").focus(); // idが"input2"の要素にフォーカスを移動
  }
});

このサンプルコードでは、idが “input1” の要素にkeydownイベントリスナーを追加し、Tabキーが押された場合に、idが “input2” の要素にフォーカスが移動するように制御しています。

これにより、フォームの入力順序をカスタマイズしたり、特定の条件下でフォーカスの移動を制限したりすることが可能になります。

○サンプルコード5:フォーカス範囲の制限

特定の要素内でのみフォーカスを移動させる場合、フォーカス範囲を制限できます。

これは、モーダルウィンドウやドロップダウンメニューなど、特定の領域内でのみ操作を許可したい場合に有効です。

const container = document.getElementById("container");

container.addEventListener("keydown", function(event) {
  if (event.key === "Tab") {
    event.preventDefault();
    const focusableElements = container.querySelectorAll("input, button");
    let index = Array.from(focusableElements).indexOf(document.activeElement);
    index = event.shiftKey ? index - 1 : index + 1;
    index = (index + focusableElements.length) % focusableElements.length;
    focusableElements[index].focus();
  }
});

このサンプルコードでは、idが “container” の要素内でTabキーを押すと、その要素内のみでフォーカスが移動するように制限しています。

これにより、ユーザーが意図しない要素にフォーカスが移動することを防ぎ、よりコントロールされた操作環境を提供することができます。

○サンプルコード6:フォーカスの視覚的強調

フォーカスされた要素を視覚的に強調するには、CSSを利用します。

視覚的な強調は、現在フォーカスされている要素をユーザーが簡単に識別できるようにするために重要です。

:focus {
  outline: 2px solid #FF9900;
}

このCSSコードでは、フォーカスされた要素にオレンジ色のアウトラインが表示されるようになります。

色や太さを調整することで、デザインに合わせた視覚的の強調を実現できます。ただし、コントラスト比に注意し、すべてのユーザーが識別しやすい色を選択することが大切です。

○サンプルコード7:フォーカス時のアニメーション

フォーカス時にアニメーションを追加するには、CSSの transition を利用します。

アニメーションを加えることで、ユーザーの注意を引き、インタラクティブな体験を提供できます。

input {
  transition: all 0.3s;
}

input:focus {
  outline: none;
  box-shadow: 0 0 5px rgba(255, 153, 0, 0.5);
}

このCSSコードでは、フォーカスされた要素にオレンジ色のシャドウがアニメーションとして表示されるようになります。

徐々に変化するエフェクトにより、ユーザーにフィードバックを与えつつ、視覚的な楽しさも提供します。

ただし、過度なアニメーションは避け、ユーザーの操作を妨げないよう配慮することが重要です。

○サンプルコード8:フォーカス順序のカスタマイズ

フォーカス順序をカスタマイズするには、HTML要素に tabindex 属性を追加します。

これにより、デフォルトのフォーカス順序を変更し、ユーザーにとって最適な操作順序を設定できます。

<input type="text" tabindex="1">
<input type="text" tabindex="3">
<input type="text" tabindex="2">

このサンプルコードでは、tabindex 属性の値が小さい順にフォーカスが移動します。

1から3までのフォーカス順序が設定されています。

ただし、tabindex の使用には注意が必要です。不適切な値を設定すると、キーボード操作性が低下する可能性があるため、慎重に設計する必要があります。

○サンプルコード9:フォーカス検索

フォーカス可能な要素を検索するには、JavaScriptを使用します。

ページ内のフォーカス可能な要素を把握することで、動的なフォーカス制御や、アクセシビリティの改善に役立てることができます。

function getFocusableElements() {
  return Array.from(document.querySelectorAll("a, button, input, textarea, select, details, [tabindex]:not([tabindex='-1'])"));
}

const focusableElements = getFocusableElements();
console.log(focusableElements);

このサンプルコードでは、フォーカス可能な要素を検索し、そのリストをコンソールに表示します。

この関数を活用することで、ページ内のフォーカス可能な要素を簡単に特定し、必要に応じて操作することが可能になります。

○サンプルコード10:フォーカスの自動移動

特定の条件を満たした場合に、フォーカスを自動的に移動させるには、JavaScriptを使用します。

これにより、ユーザーの入力効率を向上させ、スムーズな操作を実現できます。

document.getElementById("input1").addEventListener("input", function(event) {
  if (event.target.value.length >= 3) {
    document.getElementById("input2").focus();
  }
});

このサンプルコードでは、idが “input1” の要素で入力された文字数が3文字以上になった場合に、idが “input2” の要素にフォーカスが自動的に移動します。

この機能は、例えば郵便番号の入力フォームなど、一定の文字数に達したら次の入力欄に移動させたい場合に効果的です。

●注意点と対処法

フォーカス操作に関する注意点として、次の点に留意する必要があります。

アクセシビリティへの配慮は非常に重要です。

フォーカス操作をカスタマイズすることで、一部のユーザーがアクセスしにくいページになる可能性があります。

そのため、WAI-ARIAなどのアクセシビリティ技術を適切に活用し、すべてのユーザーが快適に利用できるよう心がけましょう。

また、tabindex の使用には注意が必要です。

tabindex の値が大きくなると、フォーカス順序が複雑になり、ユーザーを混乱させる恐れがあります。

可能な限り自然なHTML構造を維持し、必要最小限の tabindex 使用にとどめることをおすすめします。

まとめ

本稿では、JavaScriptを用いたフォーカス操作のさまざまな手法を紹介しました。

フォーカス操作は、ユーザーが快適にページを操作できるようにするために欠かせない要素です。

適切に実装することで、ユーザーの操作性やアクセシビリティを大幅に向上させることができます。

ポイントに注意を払いながら、ユーザーにとって使いやすく、アクセシブルなWebページを作成することが、現代のWeb開発者に求められる重要な技能の一つと言えるでしょう。

フォーカス操作の適切な実装は、ユーザー体験の向上だけでなく、ウェブサイトの品質と信頼性の向上にもつながりますので、力を入れてみてはいかがでしょうか。