• Skip to primary navigation
  • Skip to main content

Nagashima Laboratory

  • Home
  • Lecture
  • Note
  • Index
  • About

ギャラリー + アニメーション(JavaScript)

Web Animations APIと、for文を使った繰り返し処理で、画像ギャラリーの表示にアニメーション効果を加えます。

キーワード:配列、繰り返し(for)、Web Animations API

作成例(完成イメージ)

  • 作成例:https://ngsm-syr.github.io/javascript_gallery2/
  • コード:https://github.com/ngsm-syr/javascript_gallery2/

【準備】フォルダ:javascript_gallery2

①JavaScriptを書くための準備で作成したフォルダ(空のHTML、CSS、JavaScriptが入っている)を準備します。GitHubからもダウンロードできます。

②フォルダの名前を「javascript_gallery2」に変更します

③同じサイズの画像を6枚程度用意します。作例と同じ画像を使う方は、Githubからダウンロードしてください。

画像は images フォルダに入れます。

HTMLとCSSファイルの準備

まず、コンテンツ部分を用意します。

▼index.html

  <header>
    <h1>Photo Gallery</h1>
  </header>
  <main>
   <div id="gallery">
    <div class="img-item"><img src="images/img01.png" alt="number 1"><p>number 1</p></div>
    <div class="img-item"><img src="images/img02.png" alt="number 2"><p>number 2</p></div>
    <div class="img-item"><img src="images/img03.png" alt="number 3"><p>number 3</p></div>
    <div class="img-item"><img src="images/img04.png" alt="number 4"><p>number 4</p></div>
    <div class="img-item"><img src="images/img05.png" alt="number 5"><p>number 5</p></div>
    <div class="img-item"><img src="images/img06.png" alt="number 6"><p>number 6</p></div>
   </div>
  </main>

▼style.css

h1 {
  text-align: center;
}

#gallery {
  display: grid;
  max-width: 1000px;
  margin: auto;
  grid-template-columns: 1fr 1fr 1fr;
  gap: 20px;
}

.img-item {
  opacity: 0;
  filter: blur(10px);
  width: 100%;
}

.img-item img {
  width: 100%;
  height: auto;
}

.img-item p {
  text-align: center;
}

footer {
  text-align: center;
  color: #EEE;
}

定数の定義

▼script.js

const items = document.querySelectorAll('.img-item');
console.log(items);

.img-itemクラスをまとめて取得するため、querySelectorAll を使います。console.logを使って、itemsの中身を見ると、配列形式で取得できていることが確認できます。

繰り返し処理(For文)

複数の画像を表示させるためには、For文で繰り返し(ループ)処理を行います。

簡単な例でforの使用例を見ていきます。

▼コンソールに入力

for( let i = 0; i < 5; i++) {
  console.log(i);
}

let i = 0; …初期化処理。iに0を代入

i < 5; …ループ継続のための条件式

i++ …ループごとの最後に実行される式

i = 0からスタートして、ループごとに1増えていきます。i が5より小さいとき(4)まで実行されるので、最終的には5回の処理が行われます。

図にすると次のような処理をしています。

今回の場合は、画像の数だけ、処理を繰り返すことになるため「画像の数」を取得する必要が出てきます。

画像の数は、lengthで数えることができます。

▼script.js

console.log(items.length);

画像の表示をするには下記のように記述します。

▼script.js

// for文
for(let i = 0; i < items.length; i++){

  const keyframes = {
    opacity: [0, 1],
    translate: ['0 50px', 0],
    filter: ['blur(10px)', 'blur(0)'],
  };
  
  const options = {
    duration: 600,
    fill: 'forwards',
  };

  items[i].animate(keyframes, options);
}

1枚ずつ遅延させる

ループのたびに、遅延させることで、1枚ずつ遅れて表示されるようになります。

▼script.js

  const options = {
    duration: 600,
    fill: 'forwards',
    delay: i * 400,
  };

【参考】forEach文への書き換え

同じ動作をforEach文で書き換えることもできます。

▼script.js

// forEach文
items.forEach((item, i) => {

  const keyframes = {
    opacity: [0, 1],
    translate: ['0 50px', 0],
    filter: ['blur(10px)', 'blur(0)'],
  };
  
  const options = {
    duration: 600,
    delay: i * 400,
    fill: 'forwards',
  };

  item.animate(keyframes, options);
});
  • 作成例:https://ngsm-syr.github.io/javascript_gallery2/
  • コード:https://github.com/ngsm-syr/javascript_gallery2/

参考書籍・リンク

  • 「すらすらわかるJavaScript 新版」桜庭洋之,望月幸太郎, 翔泳社,2022
  • 「1冊ですべて身につくJavaScript入門講座」Mana, SBクリエイティブ, 2023
  • 「独習JavaScript」CodeMafia 外村将大, 翔泳社, 2021
  • https://developer.mozilla.org/ja/docs/Web/API/Web_Animations_API/Using_the_Web_Animations_API
  • https://developer.mozilla.org/ja/docs/Web/API/Web_Animations_API/Web_Animations_API_Concepts
  • https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/for

2023-10-21 (Last Modified: 2024-10-22) Category: 資料 Tags:javascript

Copyright © 2023–2025 · Nagashima Sayuri Laboratory