์๋ฐ์คํฌ๋ฆฝํธ : ์ฌ๋ผ์ด๋ ํจ๊ณผ
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ค์ํ ํจ๊ณผ๋ค ์ค, CSS์ ํธ๋์ง์ ์์ฑ์ ํ์ฉํ ์ด๋ฏธ์ง ์ฌ๋ผ์ด๋ ํจ๊ณผ์ ๋๋ค.
HTML ์์ค
HTML๋ก ๋ผ๋๋ฅผ ๋จผ์ ์ก์์ค๋๋ค. section ํ๊ทธ ์์๋ ํด๋์ค๋ช ์ด slider__wrap์ธ div ๋ฐ์ค, ๊ทธ ์์๋ ํด๋์ค๋ช ์ด slider__img์ธ div ๋ฐ์ค๋ฅผ ๋ง๋ค์ด ์ฃผ๊ณ , slider__img ๋ฐ์ค ์์๋ ์ด๋ฏธ์ง 5์ฅ์ ์ฝ์ ํด ์ฃผ์์ต๋๋ค.
<section id="sliderType01">
<div class="slider__wrap">
<div class="slider__img">
<div class="slider">
<img src="../assets/img/effect_bg11-min.jpg" alt="์ด๋ฏธ์ง1">
</div>
<div class="slider">
<img src="../assets/img/effect_bg12-min.jpg" alt="์ด๋ฏธ์ง2">
</div>
<div class="slider">
<img src="../assets/img/effect_bg13-min.jpg" alt="์ด๋ฏธ์ง3">
</div>
<div class="slider">
<img src="../assets/img/effect_bg14-min.jpg" alt="์ด๋ฏธ์ง4">
</div>
<div class="slider">
<img src="../assets/img/effect_bg15-min.jpg" alt="์ด๋ฏธ์ง5">
</div>
</div>
</div>
</section>
CSS ์์ค
๊ฐ๊ฐ์ ์ด๋ฏธ์ง๊ฐ ๋ด๊ธด slider ํด๋์ค์๋ absolute์ z-index ์์ฑ์ ๋ถ์ฌํจ์ผ๋ก์จ ์ด๋ฏธ์ง๋ฅผ ์ธต์ธต์ด ์์, ํ ์ฅ์ฒ๋ผ ๋ณด์ด๊ฒ๋ ์์ ํด ์ฃผ์์ต๋๋ค.
/* slider */
.slider__wrap {
width: 100%;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
}
.slider__img {
position: relative;
width: 800px;
height: 520px;
}
.slider {
position: absolute;
left: 0;
top: 0;
}
.slider::before{
position: absolute;
left: 5px;
top: 5px;
background: rgba(0,0,0,0.4);
color: #fff;
padding: 5px 10px;
}
.slider:nth-child(1)::before {content: '์ด๋ฏธ์ง1';}
.slider:nth-child(2)::before {content: '์ด๋ฏธ์ง2';}
.slider:nth-child(3)::before {content: '์ด๋ฏธ์ง3';}
.slider:nth-child(4)::before {content: '์ด๋ฏธ์ง4';}
.slider:nth-child(5)::before {content: '์ด๋ฏธ์ง5';}
.slider:nth-child(1) {z-index: 5;}
.slider:nth-child(2) {z-index: 4;}
.slider:nth-child(3) {z-index: 3;}
.slider:nth-child(4) {z-index: 2;}
.slider:nth-child(5) {z-index: 1;}
@media (max-width: 800px){
.slider__img {
width: 400px;
height: 260px;
}
}
JAVASCRIPT ์์ค
์๋ฐ์คํฌ๋ฆฝํธ๋ก๋ ๋จผ์ ์ ํ์๋ฅผ ๋ง๋ค์ด ์ฃผ์์ต๋๋ค. ์ดํ currentIndex๋ผ๋ ๋ณ์๋ฅผ ์ ์ธํ๊ณ , setInterval ํจ์๋ฅผ ์ฌ์ฉํ์ต๋๋ค. 3์ด๋ง๋ค ๋ณ์์ ๊ฐ์ด 1์ฉ ์ปค์ง๋, ์ด๋ฏธ์ง ์ฌ๋ผ์ด๋์ ์ด ๊ฐ์๋ฅผ ์ด๊ณผํ๊ฒ ๋๋ฉด ๊ธฐ๋ณธ๊ฐ(0)์์ ๋ค์ ๊ฐ์ด ์ฆ๊ฐ๋๋๋ก ์์ ํด ์ฃผ์์ต๋๋ค.
const sliderWrap = document.querySelector(".slider__wrap");
const sliderImg = sliderWrap.querySelector(".slider__img");
const slider = sliderWrap.querySelectorAll(".slider");
let currentIndex = 0; // ํ์ฌ ๋ณด์ด๋ ์ด๋ฏธ์ง
let sliderCount = slider.length; // ์ด ์ด๋ฏธ์ง ๊ฐ์
// 1000 : 1์ด, 1์ด์ ํ ๋ฒ์ฉ ์คํํ๋ค๋ ์๋ฏธ
setInterval(() => {
let nextIndex = (currentIndex + 1) % sliderCount; // ๋ค์ ์ด๋ฏธ์ง
// sliderCount์ ๊ฐ์ด 5์ด๋ฏ๋ก, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0...
// slider[0].style.opacity = "0"; // ์ฒซ๋ฒ์งธ ์ด๋ฏธ์ง ๊ฐ๋ฆฌ๊ธฐ
// slider[1].style.opacity = "1"; // ๋๋ฒ์งธ ์ด๋ฏธ์ง ๋ณด์ฌ์ฃผ๊ธฐ
// slider[1].style.opacity = "0"; // ๋๋ฒ์งธ ์ด๋ฏธ์ง ๊ฐ๋ฆฌ๊ธฐ
// slider[2].style.opacity = "1"; // ์ธ๋ฒ์งธ ์ด๋ฏธ์ง ๋ณด์ฌ์ฃผ๊ธฐ
// slider[2].style.opacity = "0"; // ์ธ๋ฒ์งธ ์ด๋ฏธ์ง ๊ฐ๋ฆฌ๊ธฐ
// slider[3].style.opacity = "1"; // ๋ค๋ฒ์งธ ์ด๋ฏธ์ง ๋ณด์ฌ์ฃผ๊ธฐ
// slider[3].style.opacity = "0"; // ๋ค๋ฒ์งธ ์ด๋ฏธ์ง ๊ฐ๋ฆฌ๊ธฐ
// slider[4].style.opacity = "1"; // ๋ค์ฏ๋ฒ์งธ ์ด๋ฏธ์ง ๋ณด์ฌ์ฃผ๊ธฐ
// slider[4].style.opacity = "0"; // ๋ค์ฏ๋ฒ์งธ ์ด๋ฏธ์ง ๊ฐ๋ฆฌ๊ธฐ
// slider[0].style.opacity = "1"; // ์ฒซ๋ฒ์งธ ์ด๋ฏธ์ง ๋ณด์ฌ์ฃผ๊ธฐ
slider[currentIndex].style.opacity = "0"; // ํ์ฌ ์ด๋ฏธ์ง ๊ฐ๋ฆฌ๊ธฐ
slider[nextIndex].style.opacity = "1"; // ๋ค์ ์ด๋ฏธ์ง ๋ณด์ฌ์ฃผ๊ธฐ
currentIndex = nextIndex;
},3000)
๋๊ธ