์๋ฐ์คํฌ๋ฆฝํธ ์ฌ๋ผ์ด๋ ํจ๊ณผ : ๋ฒํผ
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ค์ํ ํจ๊ณผ๋ค ์ค, CSS์ ํธ๋์ง์ ์์ฑ์ ํ์ฉํ ์ด๋ฏธ์ง ์ฌ๋ผ์ด๋ ํจ๊ณผ์ ๋๋ค. ์ด๋ฒ ์ ํ์ ํด๋นํ๋ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์ด์ ์ด๋ฏธ์ง, ๋ค์ ์ด๋ฏธ์ง๋ก ์ฌ๋ผ์ด๋ํ๋ ์ ํ์ ๋๋ค.
1. CSS ์์ค
.slider__wrap {
width: 100%;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
}
.slider__img { /* ์ด๋ฏธ์ง ๋ณด์ด๋ ์์ญ */
position: relative;
width: 800px;
height: 520px;
overflow: hidden;
}
.slider__inner { /* ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ธ๊ณ ์๋ ๋ถ๋ชจ(์์ง์ด๋ ๋ถ๋ถ) */
display: flex;
flex-wrap: wrap;
width: 4800px;
height: 520px;
}
.slider { /* ๊ฐ๋ณ์ ์ธ ์ด๋ฏธ์ง */
position: relative;
width: 800px;
height: 520px;
}
.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(6)::before {content: '์ด๋ฏธ์ง1';}
.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;
}
}
.slider__btn a {
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 50px;
height: 50px;
background: rgba(0, 0, 0, 0.4);
text-align: center;
line-height: 50px;
transition: all 0.2s;
display: block;
color: #fff;
}
.slider__btn a:hover {
background: rgb(118, 153, 90);
}
.slider__btn a.prev {
left: 0;
}
.slider__btn a.next {
right: 0;
}
๊ตฌ์กฐ๋ ์ ์ฒด์ ํด๋นํ๋ slider__wrap, ์ด๋ฏธ์ง๊ฐ ๋ณด์ด๋ ์์ญ์ธ
slider__img, ์ ์ฒด ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ธ๋ slider__inner, ๊ฐ๋ณ์ ์ด๋ฏธ์ง์ธ slider์ ์์๋ก
์ก์์ค๋๋ค.
์ผ์ชฝ, ์ค๋ฅธ์ชฝ ๋ฒํผ๋ ๋ง๋ค์ด ์ฃผ์์ต๋๋ค.
2. JAVASCRIPT ์์ค
2-1) ์ ํ์ ๋ง๋ค๊ธฐ
const sliderWrap = document.querySelector(".slider__wrap");
const sliderImg = document.querySelector(".slider__img"); // ๋ณด์ฌ์ง๋ ์์ญ
const sliderInner = document.querySelector(".slider__inner"); // ์์ง์ด๋ ์์ญ
const slider = document.querySelectorAll(".slider"); // ๊ฐ๋ณ์ ์ด๋ฏธ์ง
const sliderBtn = document.querySelector(".slider__btn"); // ๋ฒํผ
const sliderBtnPrev = sliderBtn.querySelector(".prev"); // ์ผ์ชฝ
const sliderBtnNext = sliderBtn.querySelector(".next"); // ์ค๋ฅธ์ชฝ
let currentIndex = 0; // ํ์ฌ ์ด๋ฏธ์ง
let sliderCount = slider.length; // ์ด๋ฏธ์ง ๊ฐ์
let sliderWidth = sliderImg.offsetWidth; // ์ด๋ฏธ์ง ๊ฐ๋ก๊ฐ
๊ฐ๊ฐ์ ํด๋นํ๋ ์ ํ์๋ฅผ ๋ง๋ค์ด ์ค๋๋ค. ํ์ฌ ์ด๋ฏธ์ง, ์ด๋ฏธ์ง ๊ฐ์, ์ด๋ฏธ์ง์ ๊ฐ๋ก๊ฐ์ ๋ณํํ ์ ์๊ธฐ ๋๋ฌธ์ let์ผ๋ก ์ ์ธํด ์ค๋๋ค.
2-2) ์ด๋ฏธ์ง์ transition ํจ๊ณผ ์ฃผ๊ธฐ
function gotoSlider(num) {
sliderInner.style.transition = "all 400ms";
sliderInner.style.transform = "translateX(" + -sliderWidth * num + "px)";
currentIndex = num;
}
์ด๋ฒ์๋ ๋งค๊ฐ๋ณ์(num)ํจ์๋ฅผ ์ฌ์ฉํด ์ฃผ์์ต๋๋ค. gotoSlider ํจ์๋ ์คํ๋์์ ๋ sliderInner(์์ง์ด๋ ์์ญ)๊ฐ sliderWidth * num๋งํผ ์ด๋ํ ์ ์๋๋ก ์์ ํด ์ฃผ์์ต๋๋ค. -๋ฅผ ๋ถ์ฌ์ค ์ด์ ๋ ์ผ์ชฝ์ผ๋ก ์ด๋ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
2-3) ๋ฒํผ ํด๋ฆญ ์ด๋ฒคํธ ์ค์ ํ๊ธฐ
// ์ผ์ชฝ ๋ฒํผ ํด๋ฆญ
sliderBtnPrev.addEventListener("click", () => {
let prevIndex = (currentIndex + sliderCount -1) % sliderCount;
gotoSlider(prevIndex);
// 4 3 2 1 0
});
// ์ค๋ฅธ์ชฝ ๋ฒํผ ํด๋ฆญ
sliderBtnNext.addEventListener("click", () => {
let nextIndex = (currentIndex + 1) % sliderCount;
gotoSlider(nextIndex);
// 0 1 2 3 4
});
// ์ผ์ชฝ ๋ฒํผ ํด๋ฆญ
sliderBtnPrev.addEventListener("click", () => {
let prevIndex = (currentIndex + sliderCount -1) % sliderCount;
gotoSlider(prevIndex);
// 4 3 2 1 0
});
// ์ค๋ฅธ์ชฝ ๋ฒํผ ํด๋ฆญ
sliderBtnNext.addEventListener("click", () => {
let nextIndex = (currentIndex + 1) % sliderCount;
gotoSlider(nextIndex);
// 0 1 2 3 4
});
๋ฒํผ์ ํด๋ฆญํ์ ๋์ ์ด๋ฒคํธ ํจ๊ณผ๋ฅผ ๋ง๋ค์ด ์ค๋๋ค. ์ฒซ๋ฒ์งธ ์ด๋ฏธ์ง์์ ์ด์ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ๋ค์ ๋ง์ง๋ง ์ด๋ฏธ์ง๋ก ์ด๋ํ๊ณ , ๋ง์ง๋ง ์ด๋ฏธ์ง์์ ๋ค์ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ๋ค์ ์ฒซ๋ฒ์งธ ์ด๋ฏธ์ง๋ก ์ด๋ํ๋๋ก ์์ ํด ์ฃผ์์ต๋๋ค.
๊ฒฐ๊ณผ
'Javascript Effect' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋ฐ์คํฌ๋ฆฝํธ ํจ๋ด๋์ค ํจ๊ณผ : ์ด์ง๊ฐ ํจ๊ณผ (5) | 2022.09.20 |
---|---|
์๋ฐ์คํฌ๋ฆฝํธ ๋ง์ฐ์ค ํจ๊ณผ : ๋ง์ฐ์ค ๋ฐ๋ผ๋ค๋๊ธฐ(GSAP) (4) | 2022.09.18 |
์๋ฐ์คํฌ๋ฆฝํธ ํจ๋ด๋์ค ํจ๊ณผ : ๋ํ๋๊ธฐ (4) | 2022.09.18 |
์๋ฐ์คํฌ๋ฆฝํธ ํจ๋ด๋์ค ํจ๊ณผ : ๋ฉ๋ด ์จ๊น, TOP๋ฒํผ (6) | 2022.09.10 |
์๋ฐ์คํฌ๋ฆฝํธ ํจ๋ด๋์ค ํจ๊ณผ : ์ฌ์ด๋ ๋ฉ๋ด (5) | 2022.09.08 |
๋๊ธ