
์ด๋ฏธ์ง ์ฌ๋ผ์ด๋ : ํธ๋ ์ง์ ํจ๊ณผ ์ฃผ๊ธฐ
์ด๋ฒ ์๊ฐ์๋ 2์ด ์ง๋ ๋๋ง๋ค ์ด๋ฏธ์ง๊ฐ ๋ฐ๋๋ ์ฌ๋ผ์ด๋ ํ์์ ํ์ด์ง๋ฅผ ์์ ํด๋ณด๊ฒ ์ต๋๋ค.๐
#1. HTML / CSS ์ค์ ํ๊ธฐ
! HTML TIP !
๊ฐ ์ด๋ฏธ์ง๋ง๋ค css์ค์ ์ ์ฃผ๊ธฐ ์ํด ๋ฐ๋ก ๋ถ๋ชจ๋ฅผ 2๋ฒ ๊ฐ์ธ์ ๋ฌถ์ด์ค๋๋ค.
โ๏ธ HTML ์คํฌ๋ฆฝํธ ๋ณด๊ธฐ
<section id="sliderType01">
<div class="slider__wrap">
<div class="slider__img">
<div class="slider">
<img src="../assets/img/city_bg01.jpg" alt="์ด๋ฏธ์ง1">
</div>
<div class="slider">
<img src="../assets/img/city_bg02.jpg" alt="์ด๋ฏธ์ง2">
</div>
<div class="slider">
<img src="../assets/img/city_bg03.jpg" alt="์ด๋ฏธ์ง3">
</div>
<div class="slider">
<img src="../assets/img/city_bg04.jpg" alt="์ด๋ฏธ์ง4">
</div>
<div class="slider">
<img src="../assets/img/city_bg05.jpg" alt="์ด๋ฏธ์ง5">
</div>
</div>
</div>
</section>
! CSS TIP !
์ด๋ฏธ์ง๊ฐ ๊ฒน์ณ์๊ธฐ๋๋ฌธ์ ๋ง์ง๋ง ์ด๋ฏธ์ง๋ง ๋ณด์ด๊ฒ ๋ฉ๋๋ค. ๋๋ฌธ์ :nth-child()๊ณผ z-index๋ฅผ ํตํด ์ด๋ฏธ์ง์ ์์๋ฅผ ๋ฐ๊ฟ์ค๋๋ค.
* z-index() : ๋ ์ด์ด์ฒ๋ผ ๊ฐ ์์๋ฅผ ์ ํด์ค๋๋ค.
โ๏ธ CSS ์คํฌ๋ฆฝํธ ๋ณด๊ธฐ
/* slider */
.slider__wrap {
width: 100%;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
}
.slider__img {
position: relative; /* ์ฑ์๋ฃจํธ ๊ธฐ์ค์ */
width: 700px;
height: 400px;
}
.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: 250px;
}
}
#2. JAVASCRIPT : ์คํฌ๋ฆฝํธ ์ง๊ธฐ
setInterval()์ ํตํด ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํด๋ณด์!
์๋์ ์ฝ๋ ์ ์ฃผ์๊ณผ ํจ๊ป ์คํฌ๋ฆฝํธ๋ฅผ ์ดํดํด๋ณด๋๋ก ํฉ์๋ค:)
๐ก ์ ์ฒด ์คํฌ๋ฆฝํธ ๋ณด๊ธฐ
const sliderWrap = document.querySelector(".slider__wrap");
const sliderImg = sliderWrap.querySelector(".slider__img"); //๋ถ๋ชจ ์์์์ ์ฐพ๋ ๊ฒ์ด ๋ ์ ํ
const slider = sliderWrap.querySelectorAll(".slider");
let currentIndex = 0; //ํ์ฌ ๋ณด์ด๋ ์ด๋ฏธ์ง
let sliderCount = slider.length; //์ด๋ฏธ์ง ์ด ๊ฐฏ์
setInterval(() => {
let nextIndex = (currentIndex + 1) % sliderCount; //๋ค์ ์ด๋ฏธ์ง
//0,1,2,3,4,5,6,7,8,9........... : ๋๋์
์ ํ์ง ์์ผ๋ฉด ์ฒ์ ์ด๋ฏธ์ง๋ก ๋์๊ฐ์ง ์๋๋ค.
//%์ ๊ฒฝ์ฐ : 1,2,3,4,0,1,2,3,4,0....... : sliderCount์ ๊ฐ์ด 5์ด๋ฏ๋ก 5๋ฒ์งธ ์ด๋ฏธ์ง์์ ๋ค์ ์ฒซ๋ฒ์งธ๋ก ๋์๊ฐ๋ค.
//currentIndex๊ฐ 0์ผ ๋ slider[nextIndex]๋ +1 ๋ผ์ 1
//slider[currentIndex]๊ฐ 1์ผ ๋ slider[nextIndex]๋ +1 ๋ผ์ 2 ์ด๋ฐ์์ผ๋ก ๋ฐ๋ณต๋จ. ์๋์ฒ๋ผ ๋ฒ๊ฑฐ๋กญ๊ฒ ์ธ ํ์ ์๋ค!
slider[currentIndex].style.opacity = "0"; //์ฒซ๋ฒ์งธ ์ด๋ฏธ์ง๋ฅผ ์๋ณด์ด๊ฒ
slider[nextIndex].style.opacity = "1"; //๋๋ฒ์งธ ์ด๋ฏธ์ง๋ฅผ ๋ณด์ด๊ฒ
currentIndex = nextIndex;
//์์ ์๋๋ก ์์
ํ๊ฒ ๋๋ฉด ์๋ ์คํฌ๋ฆฝํธ์ฒ๋ผ ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ ํ๋ํ๋ ๋ฒ๊ฑฐ๋กญ๊ฒ ์ค์ ํ ํ์๊ฐ ์๋ค.
// 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"; //์ฒซ๋ฒ์งธ ์ด๋ฏธ์ง๋ฅผ ๋ณด์ด๊ฒ
},2000) //2์ด๋ง๋ค ๋ฐ๋
โ๏ธ ์คํฌ๋ฆฝํธ ๋ณด๊ธฐ : ์ ํ์
๋จผ์ ์คํฌ๋ฆฝํธ์ ํ์ํ ์ ํ์๋ฅผ ์ค์ ํด์ฃผ์ด์ ์คํธ๋ฆฝํธ๋ฅผ ์งค ์ค๋น๋ฅผ ํฉ๋๋ค.
const sliderWrap = document.querySelector(".slider__wrap");
const sliderImg = sliderWrap.querySelector(".slider__img"); //๋ถ๋ชจ ์์์์ ์ฐพ๋ ๊ฒ์ด ๋ ์ ํ
const slider = sliderWrap.querySelectorAll(".slider");
๊ทธ ๋ค์ ๋ณ์๋ฅผ ํตํด ํ์ฌ ๋ณด์ด๊ฒ ํ ์ด๋ฏธ์ง์ ์ธ๋ฑ์ค, ์ด๋ฏธ์ง์ ์ด ๊ฐฏ์๋ฅผ ์ค์ ํฉ๋๋ค.
๋ณ์๋ก ์ ํด ๋์๋ ์ด๋ฏธ์ง์ ์ด ๊ฐฏ์๋ฅผ ํ์ฌ์ ์ธ๋ฑ์ค์ ๋๋์ด์ ๋๋จธ์ง๋ฅผ ๊ตฌํ๋ฉด 0,1,2,3,4,0,1,2,3,4...๋ก ๊ณ์ ๋ฐ๋ณตํ๊ฒ ๋ฉ๋๋ค.
๋ค์ ์คํฌ๋ฆฝํธ๋ก css์คํ์ผ ์ค ์คํ์ํฐ๋ก ํฌ๋ช
๋๋ฅผ ์ค์ ํ์ฌ ์ด๋ฏธ์ง ์ธ๋ฑ์ค๊ฐ ๋ฐ๋ ๋ ์ง๋ ์ธ๋ฑ์ค๋ค์ ํฌ๋ช
๋๋ฅผ 0์ผ๋ก ํ์ฌ ์๋ณด์ด๊ฒ ํ๊ณ
๋ค์ ์ด๋ฏธ์ง ์ธ๋ฑ์ค๊ฐ 1๋ก ๋๊ฒ ํ์ฌ ๋ณด์ด๊ฒ ํฉ๋๋ค.
ํ์ฌ ์ด๋ฏธ์ง ์ธ๋ฑ์ค์๊ฒ ๋ค์ ์ธ๋ฑ์ค๊ฐ ๋์
ํ๋ ์์ ์์ฑํ์ฌ 0๋ถํฐ 4๊น์ง ๋ฐ๋ณต๋๋๋ก ํฉ๋๋ค.
2000์ 2์ด๋ฅผ ์๋ฏธํ๋ฉฐ 2์ด๋ง๋ค ์ด๋ฏธ์ง์ ์ธ๋ฑ์ค๊ฐ 1์ฉ ์ฌ๋ผ ๋ค์ ์ด๋ฏธ์ง๊ฐ ๋ณด์ด๊ฒ ํฉ๋๋ค.
let currentIndex = 0; //ํ์ฌ ๋ณด์ด๋ ์ด๋ฏธ์ง
let sliderCount = slider.length; //์ด ์ด๋ฏธ์ง ๊ฐฏ์
setInterval(() => {
let nextIndex = (currentIndex + 1) % sliderCount; //๋ค์ ์ด๋ฏธ์ง
slider[currentIndex].style.opacity = "0"; //์ฒซ๋ฒ์งธ ์ด๋ฏธ์ง๋ฅผ ์๋ณด์ด๊ฒ
slider[nextIndex].style.opacity = "1"; //๋๋ฒ์งธ ์ด๋ฏธ์ง๋ฅผ ๋ณด์ด๊ฒ
currentIndex = nextIndex;
},2000);
#4. ๊ฒฐ๊ณผ ๋ณด๊ธฐ
'EFFECT' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[EFFCET] ์ด๋ฏธ์ง : ์ฌ๋ผ์ด๋ ์ ํ03 (12) | 2022.09.02 |
---|---|
[EFFCET] ์ด๋ฏธ์ง : ์ฌ๋ผ์ด๋ ์ ํ02 (3) | 2022.08.30 |
[QUIZ] ํด์ฆ ๋ง๋ค๊ธฐ06 : ์ฌ๋ผ์ด๋ ํ์ (3) | 2022.08.25 |
[QUIZ] ํด์ฆ ๋ง๋ค๊ธฐ05 : ๊ฐ๊ด์ 60๋ฌธ์ (4) | 2022.08.25 |
[Search] ๊ฒ์ ์ ํ ์ฌ์ดํธ ๋ง๋ค๊ธฐ03 (4) | 2022.08.23 |
๋๊ธ