【フロントエンド入門22】カルーセルとモーダルの作成|動的なコンテンツを表示する方法

Webページにおけるカルーセル(スライダー)とモーダルウィンドウは、動的なコンテンツ表示においてよく使用される要素です。カルーセルは画像やコンテンツを順番に表示し、モーダルはユーザーの注意を引くために重要な情報をポップアップ表示するのに適しています。本記事では、初心者でもわかるようにカルーセルとモーダルの基本的な作成方法を解説します。

カルーセルの基本

カルーセルとは?

カルーセル(スライダー)は、複数の画像やコンテンツを順番に表示するインターフェースです。ユーザーは次へ、前へとスライドさせながら複数の情報を閲覧できます。

カルーセルを使う場面

  • 商品のギャラリーやイメージスライドショー
  • 新着情報の表示
  • レビューや証言などの切り替え表示

基本的なカルーセルの作成

1. HTML構造

カルーセルの基本的なHTML構造は以下のようになります。

<div class="carousel">
  <div class="carousel-item active">スライド1</div>
  <div class="carousel-item">スライド2</div>
  <div class="carousel-item">スライド3</div>

  <button class="prev">&#10094;</button>
  <button class="next">&#10095;</button>
</div>

2. CSSスタイル

カルーセルの見た目を整えるためのCSSです。

.carousel {
  position: relative;
  width: 100%;
  max-width: 600px;
  overflow: hidden;
}

.carousel-item {
  display: none;
  width: 100%;
  text-align: center;
  background-color: #f0f0f0;
  padding: 20px;
}

.carousel-item.active {
  display: block;
}

button.prev, button.next {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  background-color: rgba(0, 0, 0, 0.5);
  color: white;
  border: none;
  padding: 10px;
  cursor: pointer;
}

button.prev {
  left: 0;
}

button.next {
  right: 0;
}

3. JavaScriptによる動作

カルーセルがスライドする動作を実装するためのJavaScriptコードです。

let currentIndex = 0;
const items = document.querySelectorAll('.carousel-item');
const totalItems = items.length;

function showSlide(index) {
  items.forEach(item => item.classList.remove('active'));
  items[index].classList.add('active');
}

function nextSlide() {
  currentIndex = (currentIndex + 1) % totalItems;
  showSlide(currentIndex);
}

function prevSlide() {
  currentIndex = (currentIndex - 1 + totalItems) % totalItems;
  showSlide(currentIndex);
}

document.querySelector('.next').addEventListener('click', nextSlide);
document.querySelector('.prev').addEventListener('click', prevSlide);

// 初期スライドを表示
showSlide(currentIndex);

モーダルの基本

モーダルとは?

モーダルウィンドウは、現在の画面の上に重なるように表示されるポップアップの一種です。背景を暗くし、ユーザーの注意を特定の情報に集中させるために使います。

モーダルを使う場面

  • フォームや通知の表示
  • 画像や動画の拡大表示
  • 確認ダイアログ

基本的なモーダルの作成

1. HTML構造

基本的なモーダルウィンドウのHTMLです。

<button id="openModal">モーダルを開く</button>

<div id="modal" class="modal">
  <div class="modal-content">
    <span class="close">&times;</span>
    <p>これはモーダルウィンドウです。</p>
  </div>
</div>

2. CSSスタイル

モーダルの見た目と背景のスタイルを設定します。

.modal {
  display: none; /* 初期状態では非表示 */
  position: fixed;
  z-index: 1;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, 0.5);
}

.modal-content {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  background-color: white;
  padding: 20px;
  border-radius: 5px;
  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
}

.close {
  position: absolute;
  top: 10px;
  right: 10px;
  font-size: 24px;
  cursor: pointer;
}

3. JavaScriptによる動作

ボタンをクリックするとモーダルが表示され、閉じるボタンで非表示にするJavaScriptコードです。

const modal = document.getElementById('modal');
const openModalButton = document.getElementById('openModal');
const closeModalButton = document.querySelector('.close');

openModalButton.addEventListener('click', () => {
  modal.style.display = 'block';
});

closeModalButton.addEventListener('click', () => {
  modal.style.display = 'none';
});

window.addEventListener('click', (event) => {
  if (event.target === modal) {
    modal.style.display = 'none';
  }
});

解説

  • modal.style.display = 'block':モーダルを表示します。
  • modal.style.display = 'none':モーダルを非表示にします。
  • ウィンドウの外側をクリックしたとき:モーダルが閉じるようにしています。

応用編:カルーセル内にモーダルを表示する

カルーセル内の画像をクリックすると拡大表示するモーダルを組み合わせてみましょう。

HTML構造

<div class="carousel">
  <img src="image1.jpg" class="carousel-item" onclick="openImageModal(this.src)">
  <img src="image2.jpg" class="carousel-item" onclick="openImageModal(this.src)">
  <img src="image3.jpg" class="carousel-item" onclick="openImageModal(this.src)">
</div>

<div id="imageModal" class="modal">
  <div class="modal-content">
    <span class="close">&times;</span>
    <img id="modalImage" src="" alt="">
  </div>
</div>

JavaScriptによる動作

function openImageModal(src) {
  const modal = document.getElementById('imageModal');
  const modalImage = document.getElementById('modalImage');

  modalImage.src = src;
  modal.style.display = 'block';
}

document.querySelector('.close').addEventListener('click', () => {
  document.getElementById('imageModal').style.display = 'none';
});

結論

カルーセルとモーダルは、動的なWebコンテンツを構築するための基本的なUIコンポーネントです。カルーセルで情報をスライドさせながら、モーダルで特定のコンテンツを強調することで、ユーザーの視覚的な体験を向上させることができます。

これらの基本を理解したら、次は自動スライド機能やモーダルにフォームを組み込むといった応用機能に挑戦してみましょう。