์ฌ๋ผ์ด๋ ์ดํํธ 03
์ด๋ฒ ์๊ฐ์๋ ๊ทธ ๋์ ๋ฐฐ์ ๋ JavaScript๋ฅผ ์ด์ฉํ์ฌ ์ฌ๋ผ์ด๋ ์ดํํธ๋ฅผ ๋ง๋ค์ด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
2์ด๋ง๋ค ๋ค์ ์ฌ์ง์ผ๋ก ์ฌ๋ผ์ด๋ ๋๋ ํจ๊ณผ์ด๋ฉฐ, JS ์ฝ๋๋ฅผ ๋ณด์ฌ๋๋ฆฌ๊ฒ ์ต๋๋ค.
HTML, CSS ์ฝ๋๋ ์๋ณธ ์์ค ๋ณด๊ธฐ ๋ฒํผ์ ๋๋ฌ ํ์ธํด์ฃผ์ธ์.
์, ๊ทธ๋ผ ์์ํด๋ณผ๊น์?
01. ๋ณ์์ ์์(const/let) ์ ์ธํ๊ธฐ
ํ์ํ ๋งํผ์ ๋ณ์์ ์์๋ฅผ ์ ์ธํด์ฃผ๋๋ก ํ๋ค.
const sliderWrap = document.querySelector(".slider__wrap");
const sliderImg = document.querySelector(".slider__img"); // ๋ณด์ฌ์ง๋ ์์ญ
const sliderInner = document.querySelector(".slider__inner"); // ์์ง์ด๋ ์์ญ
const slider = document.querySelectorAll(".slider"); // ๊ฐ๊ฐ์ ์ด๋ฏธ์ง
let currentIndex = 0; // ํ์ฌ ๋ณด์ด๋ ์ด๋ฏธ์ง
let sliderCount = slider.length; // ์ด๋ฏธ์ง ๊ฐ์
let sliderWidth = sliderImg.offsetWidth; // ์ด๋ฏธ์ง ๊ฐ๋ก๊ฐ
let sliderClone = sliderInner.firstElementChild.cloneNode(true); // ์ฒซ๋ฒ์งธ ์ด๋ฏธ์ง ๋ณต์ฌ
sliderInner.appendChild(sliderClone); // ์ฒซ๋ฒ์งธ ์ด๋ฏธ์ง๋ฅผ ๋ง์ง๋ง์ ๋ฃ์ด์ค
02. ์ ๋๋ฉ์ด์ ํจ๊ณผ ์ฃผ๊ธฐ
์๋ ์ฝ๋์ ๊ฐ์ด CSS์์ ์ฃผ๋ ๋ฐฉ์๊ณผ ํก์ฌํ๊ฒ transition, transform ๋ฑ์ผ๋ก ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ฅผ ์ค ์ ์๋ค.
const sliderWrap = document.querySelector(".slider__wrap");
const sliderImg = document.querySelector(".slider__img"); // ๋ณด์ฌ์ง๋ ์์ญ
const sliderInner = document.querySelector(".slider__inner"); // ์์ง์ด๋ ์์ญ
const slider = document.querySelectorAll(".slider"); // ๊ฐ๊ฐ์ ์ด๋ฏธ์ง
let currentIndex = 0; // ํ์ฌ ๋ณด์ด๋ ์ด๋ฏธ์ง
let sliderCount = slider.length; // ์ด๋ฏธ์ง ๊ฐ์
let sliderWidth = sliderImg.offsetWidth; // ์ด๋ฏธ์ง ๊ฐ๋ก๊ฐ
let sliderClone = sliderInner.firstElementChild.cloneNode(true); // ์ฒซ๋ฒ์งธ ์ด๋ฏธ์ง ๋ณต์ฌ
sliderInner.appendChild(sliderClone); // ์ฒซ๋ฒ์งธ ์ด๋ฏธ์ง๋ฅผ ๋ง์ง๋ง์ ๋ฃ์ด์ค
function sliderEffect() {
currentIndex++;
sliderInner.style.transition = "all 0.6s"; // ๋ถ๋๋ฌ์ด ์์ง์
sliderInner.style.transform = "translateX(-"+ sliderWidth * currentIndex +"px)"; // ์ด๋ฏธ์ง width๊ฐ(800px) * ์ด๋ฏธ์ง ๋ฒํธ
// sliderInner.style.transform = "translateX(-800px)"; 800*1
// sliderInner.style.transform = "translateX(-1600px)"; 800*2
// sliderInner.style.transform = "translateX(-2400px)"; 800*3
// sliderInner.style.transform = "translateX(-3200px)"; 800*4
// sliderInner.style.transform = "translateX(-4000px)"; 800*5
// sliderInner.style.transform = "translateX(-4800px)"; 800*6
03. ๋ง๋ฌด๋ฆฌ ์์
๋ง์ง๋ง ์ฌ์ง์์ ๋ค์ ์ฒซ๋ฒ์งธ ์ฌ์ง์ผ๋ก ๋์์ฌ ๋ ๋ถ์์ฐ์ค๋ฌ์ด ๋์์ ์๋ ์์ ์ฝ๋์ ๊ฐ์ด ์์ฐ์ค๋ฝ๊ฒ ๋ง๋ ๋ค.
// ๋ง์ง๋ง ์ฌ์ง์ ์์นํ์ ๋
// ํ์ฌ ์ด๋ฏธ์ง ๋ฒํธ == ์ด๋ฏธ์ง ๊ฐ์๊ฐ ๊ฐ์์ง ๋ (๋ง์ง๋ง์ ์๋ฏธํจ)
if(currentIndex == sliderCount) {
setTimeout(() => {
sliderInner.style.transition = "0s";
sliderInner.style.transform = "translateX(0px)";
}, 700); // setTimeout์ผ๋ก ๋ง์ง๋ง์์ ์ฒซ๋ฒ์งธ๋ก ๋์์ฌ ๋์ ์์ง์ ๋ถ๋๋ฝ๊ฒ ํจ
currentIndex = 0; // ๋ง์ง๋ง ์ฌ์ง ์์ ๋ ์ด๊ธฐํ์ํด
}
}
๋๊ธ