多張圖片切換的幻燈片效果
<div class="slideshow">
<img src="https://picsum.photos/900/400?random=1" alt=""/>
<img src="https://picsum.photos/900/400?random=2" alt=""/>
<img src="https://picsum.photos/900/400?random=3" alt=""/>
<img src="https://picsum.photos/900/400?random=4" alt=""/>
</div>
.slideshow {
position: relative;
margin: auto;
overflow: hidden;
height: 400px;
width: 900px;
}
.slideshow img {
position: absolute;
top: 0;
left: 50%;
transform: translateX(-50%);
display: none;
}
$('.slideshow').each(function(){
let slideImgs = $(this).find('img'),
slideImgsCount = slideImgs.length,
currentIndex = 0;
slideImgs.eq(currentIndex).fadeIn();
setInterval(showNextSlide, 5000);
function showNextSlide(){
let nextIndex = (currentIndex + 1) % slideImgsCount;
slideImgs.eq(currentIndex).fadeOut();
slideImgs.eq(nextIndex).fadeIn();
currentIndex = nextIndex;
}
})
將總共要展示的所有圖片(img xN個)包在一個容器(div)中
<div class="slideshow">
<img src=" ... ">
...
<img src=" ... ">
</div>
利用 absolute 的定位讓所有圖片重疊在一起
.slideshow {
position: relative;
}
.slideshow img {
position: absolute;
top: 0;
}
將所有圖片預設為隱藏(用jQuery控制顯示)
.slideshow img {
display: none;
}
最外層選定$(父容器).each( ... ) 可使單頁面上的多組 slideshow 都生效
$('.slideshow').each(function(){
...
})
(該單一組slideshow內)初始定義 3 個變數存放
let slideImgs = $(this).find('img'),
slideImgsCount = slideImgs.length,
currentIndex = 0;
})
指定當前第N (currentIndex) 個img淡入方式顯示(fadeIn()
)
slideImgs.eq(currentIndex).fadeIn();
使用 JS 原生的 setInterval()
每隔固定的時間點重複執行指定的 function :觸發圖片轉換(當前的消失、下一張出現)
setInterval(showNextSlide, 5000)
定義圖片轉換的function:showNextSlide()
function showNextSlide(){
let nextIndex = (currentIndex + 1) % slideImgsCount;
slideImgs.eq(currentIndex).fadeOut();
slideImgs.eq(nextIndex).fadeIn();
currentIndex = nextIndex;
}
%
),指定給nextIndex備註:
以上範例參考自jQuery 達人的階梯
個人 Blog: https://eudora.cc/