JavaScriptでランダムフェードインするギャラリーを作成

JavaScriptで、ギャラリー画像を遅延表示する場合、リスト順に表示されます。今回は、JavaScriptでランダムフェードインするギャラリーを作成を紹介します。

画像が一枚ずつ遅れて表示されます。表示される順番が、リロードするたびに変更になります。

画像が一枚ずつ遅れて表示

表示される順番が、リロードするたびに変更

コード

<div id="randomfade">
    <ul class="grid-wrapper grid">
        <li class="grid-item">
            <img src="images/music001.jpg" alt="">
        </li>
        <li class="grid-item">
            <img src="images/music002.jpg" alt="">
        </li>
        <li class="grid-item">
            <img src="images/music003.jpg" alt="">
        </li>
        <li class="grid-item">
            <img src="images/music004.jpg" alt="">
        </li>
        <li class="grid-item">
            <img src="images/music005.jpg" alt="">
        </li>
        <li class="grid-item">
            <img src="images/music006.jpg" alt="">
        </li>
        <li class="grid-item">
            <img src="images/music007.jpg" alt="">
        </li>
        <li class="grid-item">
            <img src="images/music008.jpg" alt="">
        </li>
        <li class="grid-item">
            <img src="images/music009.jpg" alt="">
        </li>
        <li class="grid-item">
            <img src="images/music010.jpg" alt="">
        </li>
    </ul>
</div>
#randomfade .grid-wrapper {
    max-width: 1500px;
    margin: 0 auto;
    padding: 0 4%;
}
#randomfade .grid-item {
	aspect-ratio: 1/1;
	width:100%;
	height:100%;
	border:none;
	overflow: hidden;
}
#randomfade .grid-item img{
	width:100%;
	height:100%;
	object-fit: cover;
	overflow: hidden;
	opacity: 0;
}
#randomfade .grid-wrapper li:first-child {
    grid-column: 1 / 3;
    grid-row: 1 / 3;
}
#randomfade .grid-wrapper li:last-child {
    grid-column: 3 / 5;
    grid-row: 3 / 5;
}
#randomfade .grid {
    display: grid;
    gap: 1em;
    grid-template-columns: repeat(4, 1fr);
    margin-top: 6%;
    margin-bottom: 50px;
}

/* モバイル版
------------------------------- */
@media (max-width: 740px) {
	
	#randomfade .grid {
      display: grid;
      gap: 1em;
      grid-template-columns: repeat(2, 1fr);
    }
    #randomfade .grid-wrapper li:first-child {
        grid-column: auto;
        grid-row: auto;
    }
	#randomfade .grid-wrapper li:last-child {
        grid-column: auto;
        grid-row: auto;
    }
   
}
const item = document.querySelectorAll('#randomfade .grid-item img');
const itemArray = Array.from(item);
const shuffledItemArray = shuffleArray(itemArray);
window.addEventListener('load', () => {
for(let i = 0; i < shuffledItemArray.length; i++ ){
	shuffledItemArray[i].animate(
		{
			opacity: [0, 1]
		},
		{
			delay: 2000 + i * 400,
			duration: 3000,
			fill: 'forwards',
			easing: 'ease'
		}
	)
}
});

function shuffleArray(sourceArr) {
    // 元の配列の複製を作成
    const array = sourceArr.concat();
    // Fisher–Yatesのアルゴリズム
    const arrayLength = array.length;
    for (let i = arrayLength - 1; i >= 0; i--) {
        const randomIndex = Math.floor(Math.random() * (i + 1));
        [array[i], array[randomIndex]] = [array[randomIndex], array[i]];
    }
  return array;
}

RECOMMEND

CONTACT

Webサイト作成は、是非
CXG DESIGNへご検討ください。