์๋ฐ์คํฌ๋ฆฝํธ ์ฌ๋ผ์ด๋ ํจ๊ณผ : ์ข๋ก ์์ง์ด๋ ์ ํ
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ค์ํ ํจ๊ณผ๋ค ์ค, CSS์ ํธ๋์ง์ ์์ฑ์ ํ์ฉํ ์ด๋ฏธ์ง ์ฌ๋ผ์ด๋ ํจ๊ณผ์ ๋๋ค. ์ด๋ฒ ์ ํ์ ์ผ์ชฝ์ผ๋ก ๋ฏธ๋๋ฌ์ง๋ฏ์ด ์ด๋ฏธ์ง๊ฐ ๋์ด๊ฐ๋ ํจ๊ณผ๋ฅผ ์ถ๊ฐํด์ค ์ ํ์ ๋๋ค.
HTML ์์ค
HTML๋ก ๋ผ๋๋ฅผ ๋จผ์ ์ก์์ค๋๋ค. section ํ๊ทธ ์์๋ ํด๋์ค๋ช ์ด slider__wrap์ธ div ๋ฐ์ค, ๊ทธ ์์๋ ํด๋์ค๋ช ์ด slider__img์ธ div ๋ฐ์ค๋ฅผ ๋ง๋ค์ด ์ฃผ๊ณ , ๊ทธ ์์๋ slider__inner ๋ฐ์ค, ๊ทธ ์ slider ๋ฐ์ค ์์๋ ๊ฐ๊ฐ ์ด๋ฏธ์ง 5์ฅ์ ์ฝ์ ํด ์ฃผ์์ต๋๋ค. ๊ฐ๊ฐ์ div ๋ฐ์ค์ ์ฉ๋๋ CSS ์์ค์์ ์ถ๊ฐ๋ก ์ค๋ช ํ๋๋ก ํ๊ฒ ์ต๋๋ค. ๊ถ๊ธํ๋ฉด ๋ณด์๋ ๊ฐ...
<section id="sliderType02">
<div class="slider__wrap">
<div class="slider__img">
<div class="slider__inner">
<div class="slider">
<img src="../assets/img/effect_bg16-min.jpg" alt="์ด๋ฏธ์ง1">
</div>
<div class="slider">
<img src="../assets/img/effect_bg17-min.jpg" alt="์ด๋ฏธ์ง2">
</div>
<div class="slider">
<img src="../assets/img/effect_bg18-min.jpg" alt="์ด๋ฏธ์ง3">
</div>
<div class="slider">
<img src="../assets/img/effect_bg19-min.jpg" alt="์ด๋ฏธ์ง4">
</div>
<div class="slider">
<img src="../assets/img/effect_bg20-min.jpg" alt="์ด๋ฏธ์ง5">
</div>
</div>
</div>
</div>
</div>
</section>
CSS ์์ค
/* slider */
.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: 4000px;
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(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 ํจ์๋ฅผ ์ฌ์ฉํ์ต๋๋ค. 2์ด๋ง๋ค ๋ณ์์ ๊ฐ์ด 1์ฉ ์ปค์ง๋, ์ด๋ฏธ์ง ์ฌ๋ผ์ด๋์ ์ด ๊ฐ์๋งํผ ์ปค์ง๋ฉด ๊ธฐ๋ณธ๊ฐ(0)์์ ๋ค์ ๊ฐ์ด ์ฆ๊ฐ๋๋๋ก ์์ ํด ์ฃผ์์ต๋๋ค. ์ด๋ฏธ์ง๋ค์๋ transition์ผ๋ก ์์ง์ ์ ๋๋ฉ์ด์ ์ ์ฃผ์๊ณ , ์ด๋ฏธ์ง์ ๋๋น๊ฐ 800px์ด๋ฏ๋ก ์ข์ธก์ผ๋ก 800px์ฉ ์์ง์ด๋๋ก ์์ ํด ์ฃผ์์ต๋๋ค.
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; // ์ด๋ฏธ์ง ๊ฐ์
sliderInner.style.transition = "all 0.6s";
// sliderInner.style.transform += "translateX(0px)"; 800 * 0
// 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
setInterval(() => { // 2000 : 2์ด์ ํ ๋ฒ์ฉ ์คํ
// currentIndex++;
// currentIndex์ ๊ฐ์ด ์ด๋ฏธ์ง ๊ฐ์๋ฅผ ์ด๊ณผํ๋ฉด, ๊ฐ์ ๋ฆฌ์
์ํค๋๋ก ํจ
// 1. if ์กฐ๊ฑด๋ฌธ์ ํ์ฉํ ๋ฐฉ๋ฒ
// if(currentIndex < slider.length-1){
// currentIndex++;
// } else {
// currentIndex = 0;
// }
// 2. ์ผํญ์ฐ์ฐ์๋ฅผ ํ์ฉํ ๋ฐฉ๋ฒ(๊ถ์ฅ๋์ง๋ ์์)
// (currentIndex < 4) ? currentIndex++ : currentIndex = 0;
// 3. ์ฐ์ฐ์๋ฅผ ํ์ฉํ์ฌ ๊ฐ๋จํ๊ฒ ํํํ๊ธฐ
currentIndex = (currentIndex + 1) % sliderCount; // 1 2 3 4 0 1 2 3 4
sliderInner.style.transform = "translateX("+ -800 * currentIndex +"px)";
}, 2000);
JQUERY ์์ค
์ด๋ฒ์๋ JQUERY ์์ค๋ก๋ ์์ ํด ๋ณด์์ต๋๋ค. JQUERY๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ํํํ๋ ์์ ๋น๊ต์ ๊ฐ๋จํ๊ฒ ํํํ ์ ์์์ง๋ง, ์๋ฐ์คํฌ๋ฆฝํธ์ ๋นํด ์ ๋๋ฉ์ด์ ๋ถ๋ถ์ ๋ค์ ๋ณต์กํ์ต๋๋ค.
let currentIndex = 0;
// ์๋ฐ์คํฌ๋ฆฝํธ(์ข๋ณ)์์ ๋ค์๊ณผ ๊ฐ์ ์์ฑํ๋ ์์, ์ ์ด์ฟผ๋ฆฌ(์ฐ๋ณ)์์๋ ๊ฐ๋จํ ํํํ ์ ์์
// document.querySelector(".slider__inner") = $(".slider__inner")
setInterval(() => {
currentIndex = (currentIndex + 1) % $(".slider").length;
// $(".slider__inner").animate({
// transform : "translateX("+ -800 * currentIndex +")"
// }, 2000);
$(".slider__inner").css("position", "relative"); // css์ ์คํ์ผ ์ถ๊ฐํ๊ธฐ
$(".slider__inner").animate({ left: -800 * currentIndex }, 600)
}, 2000);
GSAP ์์ค
์ด๋ฒ์๋ GSAP ์์ค๋ก๋ ์์ ํด ๋ณด์์ต๋๋ค. GSAP๋ฅผ ํ์ฉํ๋ฉด, ๊ฐ๋จํ ์์ค๋ก ๋ถ๋๋ฌ์ด ์ ๋๋ฉ์ด์ ์ ํํํ ์ ์์ต๋๋ค.
const slider = document.querySelectorAll(".slider");
let currentIndex = 0;
setInterval(() => {
currentIndex = (currentIndex + 1) % slider.length;
gsap.to(".slider__inner", {
x: -800 * currentIndex,
});
}, 2000);
๋๊ธ