《jQuery》複数のエリアでランダムに画像を切り替える
公開日:2025年04月08日 最終更新日:2025年4月8日
各エリア画像をランダムで切り替えます。
DEMO
















HTML
<div class="photo">
<div class="photo-area">
<img src="https://placehold.jp/000000/ffffff/300x300.png?text=1">
<img src="https://placehold.jp/333333/ffffff/300x300.png?text=2">
<img src="https://placehold.jp/666666/ffffff/300x300.png?text=3">
<img src="https://placehold.jp/999999/ffffff/300x300.png?text=4">
</div>
<div class="photo-area">
<img src="https://placehold.jp/000000/ffffff/300x300.png?text=1">
<img src="https://placehold.jp/333333/ffffff/300x300.png?text=2">
<img src="https://placehold.jp/666666/ffffff/300x300.png?text=3">
<img src="https://placehold.jp/999999/ffffff/300x300.png?text=4">
</div>
<div class="photo-area">
<img src="https://placehold.jp/000000/ffffff/300x300.png?text=1">
<img src="https://placehold.jp/333333/ffffff/300x300.png?text=2">
<img src="https://placehold.jp/666666/ffffff/300x300.png?text=3">
<img src="https://placehold.jp/999999/ffffff/300x300.png?text=4">
</div>
<div class="photo-area">
<img src="https://placehold.jp/000000/ffffff/300x300.png?text=1">
<img src="https://placehold.jp/333333/ffffff/300x300.png?text=2">
<img src="https://placehold.jp/666666/ffffff/300x300.png?text=3">
<img src="https://placehold.jp/999999/ffffff/300x300.png?text=4">
</div>
</div>
CSS
aspect-ratioで高さを取得していますので、画像の比率にあわせて変更してください。
.photo {
display: flex;
flex-wrap: wrap;
}
.photo-area {
aspect-ratio: 1 / 1; /* 画像の比率 */
display: flex;
position: relative;
width: 25%;
}
.photo-area img {
height: auto;
left: 0;
opacity: 0;
position: absolute;
top: 0;
transition: opacity .5s ease;
width: 100%;
z-index: 0;
}
.photo-area img.active {
opacity: 1;
z-index: 1;
}
JavaScript
記述の前にjQueryの読み込みが必要です。
jQuery(function ($) {
const interval = 2000; // 切り替え間隔(ミリ秒)
$(".photo-area").each(function () {
$(this).find('img').eq(0).addClass("active");
});
setInterval(() => {
const $allImages = $(".photo-area img");
const $inactiveImages = $allImages.not(".active");
const $randomImage = $inactiveImages.eq(Math.floor(Math.random() * $inactiveImages.length));
const $siblings = $randomImage.siblings("img");
$siblings.removeClass("active");
$randomImage.addClass("active");
}, interval);
});