Reactで画像がクロスフェードするスライドショーを作る
2025/08/19 (火) - 09:00 JavaScript
Reactで複数枚の画像をクロスフェードしてループで切り替えるスライドを簡易的に作ってみる。

JavaScriptのコードは以下の通り。予め画像を用意しておきそれを1枚ずつ切り替える想定です。ポイントとしては画像のクロスフェードを制御をCSS側で制御することで、class属性の有無で表示・非表示を切り替えます。
import React, { useState, useEffect } from 'react';
import './ImageSlider.css';
// 画像の枚数とファイル名を配列で指定
const images = [
'slide1.webp',
'slide2.webp',
'slide3.webp'
];
function ImageSlider() {
const [currentIndex, setCurrentIndex] = useState(0);
useEffect(() => {
// setIntervalで3秒ごとに画像を切り替えるタイマーを設定
const timerId = setInterval(() => {
setCurrentIndex(prevIndex => (prevIndex + 1) % images.length);
}, 3000);
return () => clearInterval(timerId);
}, []);
return (
<div className="imgSlide">
{images.map((image, index) => (
<img
key={index}
src={image}
alt={`画像No:${index + 1}`}
className={`imgSlideItem ${currentIndex === index ? 'isActive' : ''}`}
width={640}
height={480}
/>
))}
</div>
);
}
export default ImageSlider;
CSSは以下の通りで画像の表示制御をします。transitionプロパティで透明度のスピードなどを制御します。標準では画像の透明度のopacityプロパティを0で不可視にしておき、アクティブになったらclass属性を付与し可視させます。
.imgSlide{
position: relative;
width: 640px;
height: 480px;
overflow: hidden;
}
.imgSlideItem{
display: block;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: cover;
opacity: 0; /* 非アクティブ時は画像の透明度を0 */
transition: opacity 1s ease-in-out; /* 1秒かけてフェードイン・アウト */
}
.imgSlideItem.isActive{
opacity: 1; /* アクティブ時は画像の透明度を1 */
}
コンポーネント化して任意の位置に埋め込むのがいいでしょう。
おしまい♥
タグ:React
おすすめ記事
- エックスサーバーのレンタルサーバでNext.js起動してみた
- Next.jsとWordPressのREST APIで記事検索を実装する
- テキストボックスに入力した文字でHTMLリストを絞り込み表示する
- [CSSのみ]View Transitions APIで画面遷移アニメーションの実装
- 戻るボタンで広告が表示されるギミックを簡易的に実装する
トラックバック & ピンバック
- この記事へのトラックバックURI:
- https://weblog.walk-life.me/react_slide/trackback/