ギャラリー Web サイトのナビゲーションを備えた複数のモーダルの作成

ギャラリー Web サイトのナビゲーションを備えた複数のモーダルの作成
ギャラリー Web サイトのナビゲーションを備えた複数のモーダルの作成

インタラクティブなモーダルで画像ギャラリーを強化する

視覚的に魅力的な画像ギャラリーは最新の Web サイトに不可欠ですが、モーダルでスムーズな機能を確保するのは難しい場合があります。ギャラリーに複数の作業モーダルを実装するのに苦労しているのは、あなただけではありません。多くの開発者は、モーダルが正しく開かないか、モーダルが相互に競合するという問題に遭遇しています。

モーダルを使用すると、訪問者は大きな形式で画像を表示できるだけでなく、ユーザー エクスペリエンスも向上します。追加 ナビゲーション矢印は、Facebook やメッセンジャーなどのプラットフォームと同様に、ユーザーが毎回モーダルを閉じることなくスムーズに画像を閲覧できるようにすることで、ユーザビリティをさらに向上させます。

この記事では、HTML、CSS、JavaScript の設定に複数のモーダルを統合する方法について説明します。シンプルな矢印を使用してシームレスなナビゲーション エクスペリエンスを作成する方法も学びます。他の解決策を試してもうまくいかなかったとしても、次のアプローチはこれらの課題に対処するための信頼できる方法を提供するはずです。

さあ、詳しく見ていきましょう 段階的な解決策, ギャラリー内の各画像が、左右のナビゲーション矢印を備えた独自のモーダルで開くようになります。ほんの少し調整するだけで、ギャラリーのユーザー エクスペリエンスを次のレベルに引き上げることができます。

指示 使用例と説明
querySelectorAll() このコマンドは、指定された CSS セレクターに一致するすべての要素を選択します。スクリプトでは、ギャラリー内のすべての画像を取得するために使用され、クリックされたときに各画像がモーダルをトリガーできるようになります。
addEventListener() イベントハンドラーを要素に登録します。ここでは、画像とナビゲーション矢印のクリック イベントをリッスンするために使用され、モーダルと画像の遷移が正しく機能することを保証します。
classList.add() CSS クラスを要素に動的に追加します。この例では明示的に示されていませんが、このメソッドはクラスを切り替えてモーダルを表示または非表示にするのに役立ちます。
DOMContentLoaded 最初の HTML ドキュメントが完全にロードされ、解析されたときにトリガーされるイベント。これにより、DOM ですべての要素が使用可能になった後にのみ JavaScript コードが実行されるようになります。
modulus (%) operator 除算の余りを計算するために使用されます。画像間を移動するとき (たとえば、最後の画像から最初の画像に移動するとき) にインデックスをラップすることで、循環ナビゲーションの作成に役立ちます。
style.display JavaScript を介して要素の CSS 表示プロパティを操作します。モーダル スクリプトでは、画像をクリックまたは閉じたときにモーダルを表示または非表示にするために使用されます。
this メソッド内の現在のオブジェクトを参照します。モジュラー JavaScript アプローチでは、GalleryModal クラスのプロパティとメソッドにアクセスするときに、GalleryModal クラスのコンテキストを維持するために使用されます。
forEach() 配列または NodeList の各要素を反復処理します。このコマンドは、クリック イベントをすべてのギャラリー画像に動的に付加するために使用されます。
new オブジェクトまたはクラスの新しいインスタンスを作成します。 2 番目の解決策では、新しい GalleryModal(images) コマンドがギャラリー モーダル機能を初期化します。
transform: translateY() ナビゲーション矢印を垂直方向に整列させるために使用される CSS プロパティ。これにより、コンテンツの高さが動的に変化する場合でも、矢印が確実に中央に配置されます。

モーダル スクリプトがギャラリー Web サイトを強化する方法

提供されたコードに実装されたモーダル機能により、ユーザーはギャラリー ページから離れることなく、任意の画像をクリックして展開された分離ビューで表示できるようになります。ギャラリー内の各画像は、 モーダル、他の画像を切り替えるためのナビゲーション矢印とともに画像がフルサイズで表示されます。このアプローチにより、 ユーザーエクスペリエンス ソーシャルメディアプラットフォームと同様に、訪問者がモーダル自体内でギャラリー全体をシームレスに閲覧できるようにします。

この機能の重要な要素は、JavaScript の使用です。 イベントリスナー。すべての画像にはクリック イベントが割り当てられ、モーダルが開き、クリックされた画像に基づいてコンテンツが動的に更新されます。 2 番目のソリューションで使用されるモジュラー アプローチは、モーダル動作をクラスにカプセル化することにより、スケーラブルなシステムを作成します。これにより、ギャラリーまたはその機能が将来拡張された場合でも、コードの保守と拡張が容易になります。

モーダル内のナビゲーションは、「次へ」と「前へ」という 2 つの矢印を使用して制御されます。これらの矢印は JavaScript を使用して、現在のインデックスを増分または減分することによって表示画像を更新します。 モジュラス演算子 ギャラリーの終わりまたは始まりに到達したときに画像インデックスが循環するようにします。これにより、ユーザーがナビゲーション中に行き止まりに陥るのを防ぎ、継続的なブラウジング エクスペリエンスを提供します。

の使用 CSS モーダルと矢印のスタイルを設定すると、デザインが応答性が高く、最新の Web 標準に準拠するようになります。モーダルは画面サイズに関係なく中央に配置され、矢印は 翻訳Y() 財産。これにより、インターフェイスの美しさとさまざまなデバイス間での使いやすさが保証されます。 HTML レイアウトからモジュール式 JavaScript クラスに至る全体の構造により、堅牢で保守しやすく、ユーザーフレンドリーなギャラリー システムが保証されます。

解決策 1: 矢印を使用した基本的な HTML、CSS、および JavaScript モーダル

このソリューションでは、ナビゲーション モーダルに HTML、CSS、およびバニラ JavaScript を使用したフロントエンドのみのアプローチを示します。

// HTML structure for each modal
<div class="modal" id="modal1">
  <span class="close" onclick="closeModal()">&times;</span>
  <img class="modal-content" id="img01">
  <div class="caption"></div>
  <div class="nav left" onclick="prevImage()">❮</div>
  <div class="nav right" onclick="nextImage()">❯</div>
</div>
// JavaScript to handle modal behavior
let currentImage = 0;
const images = document.querySelectorAll('.galleryimg');
const modal = document.getElementById('modal1');
const modalImg = document.getElementById('img01');
images.forEach((img, index) => {
  img.onclick = () => {
    openModal(index);
  };
});
function openModal(index) {
  currentImage = index;
  modal.style.display = "block";
  modalImg.src = images[index].src;
}
function closeModal() {
  modal.style.display = "none";
}
function nextImage() {
  currentImage = (currentImage + 1) % images.length;
  modalImg.src = images[currentImage].src;
}
function prevImage() {
  currentImage = (currentImage - 1 + images.length) % images.length;
  modalImg.src = images[currentImage].src;
}
// CSS for modal styling
.modal {
  display: none;
  position: fixed;
  z-index: 1;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, 0.8);
}
.modal-content {
  margin: auto;
  display: block;
  width: 80%;
}
.nav {
  cursor: pointer;
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
}

解決策 2: イベント委任を使用したモジュラー JavaScript アプローチ

このアプローチでは、モジュール式 JavaScript 関数を使用して、スケーラビリティと保守性を向上させます。

// Modular JavaScript setup for gallery modal
class GalleryModal {
  constructor(images) {
    this.images = images;
    this.currentImage = 0;
    this.modal = document.querySelector('.modal');
    this.modalImg = this.modal.querySelector('.modal-content');
    this.attachEventListeners();
  }
  attachEventListeners() {
    this.images.forEach((img, index) => {
      img.addEventListener('click', () => this.open(index));
    });
    this.modal.querySelector('.left').addEventListener('click', () => this.prev());
    this.modal.querySelector('.right').addEventListener('click', () => this.next());
  }
  open(index) {
    this.currentImage = index;
    this.modal.style.display = 'block';
    this.modalImg.src = this.images[index].src;
  }
  next() {
    this.currentImage = (this.currentImage + 1) % this.images.length;
    this.modalImg.src = this.images[this.currentImage].src;
  }
  prev() {
    this.currentImage = (this.currentImage - 1 + this.images.length) % this.images.length;
    this.modalImg.src = this.images[this.currentImage].src;
  }
}
// Initialize the modal functionality
document.addEventListener('DOMContentLoaded', () => {
  const images = document.querySelectorAll('.galleryimg');
  new GalleryModal(images);
});
// Additional CSS Styling
.modal {
  display: none;
  position: fixed;
  width: 100%;
  height: 100%;
  background: rgba(0, 0, 0, 0.8);
  justify-content: center;
  align-items: center;
}

アクセシビリティとユーザビリティ機能によるギャラリー モーダルの改善

複数の作成を超えて モーダル ナビゲーションに関して考慮すべきもう 1 つの重要な側面は、アクセシビリティの向上です。障害のあるユーザーがギャラリーにアクセスできるようにすることで、Web サイトが包括的になることが保証されます。これは、適切な ARIA 属性を HTML 要素に追加し、すべての画像に意味のある内容が含まれていることを確認することで実現できます。 代替 文章。これにより、スクリーン リーダー用の説明が提供され、視覚障害のあるユーザーでもコンテンツを読みやすくなります。

使いやすさにおけるもう 1 つの重要な要素は、ユーザーがキーボードとマウスの両方を使用してモーダルをナビゲートできるようにすることです。これは、次のような特定のキーボード イベントをリッスンすることで実現できます。 逃げる キーでモーダルを閉じ、矢印キーで画像ナビゲーションを行います。これらの機能を実装すると、ギャラリーの機能が強化され、ユーザーにギャラリーを操作するための複数の方法が提供されます。さらに、携帯電話から大型モニターまで、あらゆる画面サイズでモーダルが適切に表示されるようにするには、レスポンシブ デザインが不可欠です。

最後に、画像の読み込みを最適化すると、ギャラリーのパフォーマンスに大きな影響を与える可能性があります。遅延読み込みテクニック ( 読み込み中=「怠惰」 画像に属性を設定し、ユーザーに表示されている場合にのみ画像をロードできるようにします。これにより、不必要なデータ消費が防止され、最初のページの読み込みが高速化されます。と組み合わせる JavaScriptベースのモーダル、これらの最適化により、デバイスやネットワーク条件全体でスムーズで応答性の高いユーザー エクスペリエンスが保証されます。

JavaScript を使用したモーダルの実装に関するよくある質問

  1. JavaScript を使用してモーダルをトリガーするにはどうすればよいですか?
  2. 使用できます addEventListener('click') 画像をクリックするとモーダルが開きます。
  3. キーボードを使用してモーダルを閉じるにはどうすればよいですか?
  4. 聞いてください keydown イベントを実行して、 key === 'Escape' をクリックしてモーダルを閉じます。
  5. 次および前の画像ナビゲーションを実装する最も簡単な方法は何ですか?
  6. 使用 modulus (%) リストの最後に到達せずに画像を循環します。
  7. モーダルがモバイル デバイスで動作することを確認するにはどうすればよいですか?
  8. 使用 media queries CSS を使用して、さまざまな画面サイズでデザインをテストします。
  9. 遅延読み込みとは何ですか?どうすれば実装できますか?
  10. 追加 loading="lazy" あなたへ img タグを使用して、画像がビューポートに表示されるまで画像の読み込みを延期します。

最終的な考えをまとめる

関数の実装 モーダル ギャラリー内の機能は、ユーザー インタラクションを向上させるために非常に重要です。矢印ベースのナビゲーションやキーボード サポートなどの機能を追加すると、ギャラリーがユーザー フレンドリーになり、複数のデバイスでアクセスできるようになります。これらの要素により、ユーザーは画像を効率的に閲覧できるようになります。

ギャラリーのパフォーマンスを維持するには、遅延読み込みなどの最適化手法を使用する必要があります。うまく構成された組み合わせ JavaScript そして CSS スムーズな移行と魅力的なエクスペリエンスを可能にします。ベスト プラクティスに従うことで、ギャラリーの応答性が高く、アクセスしやすく、将来の更新で簡単に拡張できるようになります。

複数のモーダルを構築するためのソースとリファレンス
  1. 実装に関する詳細なドキュメント モーダル JavaScript を使用したユーザー インタラクションの処理については、次の場所を参照してください。 MDN ウェブ ドキュメント
  2. ギャラリーのレイアウトを最適化するためのレスポンシブ デザイン手法は、以下から参照されました。 CSS のトリック 。このガイドでは、最新の CSS 実践についての実践的な洞察を提供します。
  3. パフォーマンスを向上させるための画像の遅延読み込みの概念については、次の場所で説明されています。 Web.dev は、Web 開発のベストプラクティスを共有するために Google によって作成されたプラットフォームです。
  4. ナビゲーションのコンセプトとユーザー エクスペリエンスに関する洞察は、以下からインスピレーションを受けています。 UXデザイン 、モーダル ギャラリーにシームレスな矢印を実装するための指示を提供しました。
  5. JavaScript でのイベント処理をより深く理解するには、この記事を参照してください。 JavaScript.info 非常に有益でした。