サムネイルをクリック！スライドショーをJavaScriptで作ってみよう！

### はじめに

JavaScriptで簡単なスライドショーを作ってみませんか？今回は、サムネイル画像をクリックするとメイン画像が切り替わり、スライドショーボタンを押すと自動で画像が切り替わる、おしゃれなスライドショーを作ってみます。この記事では初心者でもわかりやすいように、一つ一つのステップを説明していきます！

### 実際に作るもの

- **メイン画像**が画面の中央に表示され、下に**サムネイル画像**が並びます。
- サムネイルをクリックすると、メイン画像がそのサムネイルの画像に切り替わります。
- スライドショーボタンを押すと、サムネイルの画像が順番に自動でメイン画像に表示されるようになります。

### ファイル構成

```bash
/slideshow/
│
├── index.html      # HTMLファイル
├── script.js       # JavaScriptファイル
└── style.css       # CSSファイル
```

### スライドショーの作り方

それでは、実際にコードを書いていきましょう！

---

### 1. HTMLファイル (`index.html`)

HTMLファイルでは、メイン画像とサムネイルを表示する部分を定義します。また、スライドショーを開始するためのボタンも設置します。

```html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>おしゃれなサムネイル付きスライドショー</title>
    <link rel="stylesheet" href="style.css"> <!-- ユーザが設定したパスに変更 -->
</head>
<body>
    <h2>サムネイル付きスライドショー</h2>

    <!-- メイン画像の表示エリア -->
    <div class="main-image-container">
        <img id="mainImage" src="images/onepiece01_luffy.png" alt="メイン画像" class="main-image"> <!-- 初期のメイン画像 -->
    </div>

    <!-- サムネイルリスト -->
    <div class="thumbnail-container" id="thumbnailContainer"></div>

    <!-- スライドショーボタン -->
    <button id="startSlideshowButton" onclick="startSlideshow()">スライドショー開始</button>

    <script src="script.js"></script> <!-- ユーザが設定したパスに変更 -->
</body>
</html>

```

### 2. JavaScriptファイル (`script.js`)

次に、サムネイルをクリックした際にメイン画像を変更したり、スライドショーを開始するためのJavaScriptを記述します。

```javascript
let currentImageIndex = 0;
let images = [
    '画像パス1', 
    '画像パス2', 
    '画像パス3'
]; // ここでスライドショーに使う画像のリストを定義
let slideshowInterval;

// ページがロードされたらサムネイルを生成
window.onload = function() {
    const thumbnailContainer = document.getElementById('thumbnailContainer');

    // 画像配列からサムネイルを動的に生成
    images.forEach((imageSrc, index) => {
        const thumbnail = document.createElement('img');
        thumbnail.src = imageSrc;
        thumbnail.classList.add('thumbnail');
        thumbnail.alt = `サムネイル${index + 1}`;
        thumbnail.onclick = function() {
            selectImage(imageSrc);
        };
        thumbnailContainer.appendChild(thumbnail);
    });
};

// サムネイルをクリックしてメイン画像を変更する関数
function selectImage(imageSrc) {
    document.getElementById('mainImage').src = imageSrc;
    currentImageIndex = images.indexOf(imageSrc); // 現在の画像インデックスを更新
}

// スライドショーを開始する関数
function startSlideshow() {
    // スライドショーの間隔を設定
    if (slideshowInterval) {
        clearInterval(slideshowInterval); // 既にスライドショーが実行中ならクリア
    }
    slideshowInterval = setInterval(function() {
        currentImageIndex = (currentImageIndex + 1) % images.length; // 次の画像へ
        document.getElementById('mainImage').src = images[currentImageIndex];
    }, 3000); // 3秒ごとに次の画像を表示
}

```

### 3. CSSファイル (`style.css`)

最後に、見た目をおしゃれにするためにCSSを追加します。画像やボタンにホバースタイルやアニメーション効果を加え、全体のデザインを整えます。

```css
body {
    font-family: 'Arial', sans-serif;
    background-color: #f9f9f9;
    text-align: center;
    margin: 0;
    padding: 20px;
}

h2 {
    font-size: 2em;
    color: #333;
    margin-bottom: 20px;
}

.main-image-container {
    margin: 0 auto;
    padding: 10px;
    width: 80%;
    max-width: 700px;
    box-shadow: 0px 10px 20px rgba(0, 0, 0, 0.1);
    border-radius: 10px;
    background-color: white;
}

.main-image {
    width: 100%;
    border-radius: 10px;
    object-fit: cover;
    transition: transform 0.3s ease-in-out, box-shadow 0.3s ease-in-out;
}

.main-image:hover {
    transform: scale(1.02);
    box-shadow: 0 15px 30px rgba(0, 0, 0, 0.2);
}

.thumbnail-container {
    display: flex;
    justify-content: center;
    gap: 10px;
    margin-top: 20px;
}

.thumbnail {
    width: 100px;
    height: 70px;
    border-radius: 10px;
    cursor: pointer;
    object-fit: cover;
    transition: transform 0.3s ease, box-shadow 0.3s ease;
    border: 2px solid #ddd;
}

.thumbnail:hover {
    transform: scale(1.1);
    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
    border-color: #333;
}

button {
    margin-top: 20px;
    padding: 12px 24px;
    font-size: 16px;
    background-color: #5c67f2;
    color: white;
    border: none;
    border-radius: 5px;
    cursor: pointer;
    transition: background-color 0.3s ease;
}

button:hover {
    background-color: #4953d0;
}

@media (max-width: 768px) {
    .thumbnail {
        width: 80px;
        height: 60px;
    }

    .main-image-container {
        width: 90%;
    }
}
```

### 画面表示
![スクリーンショット 2024-09-11 19.01.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75802/2f2a2f2c-47bc-f623-fc5c-7946056370c9.png)

### 最後に

これで、サムネイル付きのおしゃれなスライドショーが完成しました！ぜひ、HTML、CSS、JavaScriptの組み合わせを楽しみながら、さらにカスタマイズしてみてください。パスに関しては、ユーザの環境に合わせて設定してくださいね。


**補足**：  
パスの指定は各自のプロジェクト構造に合わせて設定してください。記事内ではサンプルとして相対パスやフルパスを使用しましたが、ご自身の環境に合わせて適宜変更してください。