๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Effect/Slide Effect

[Slide Effect] ์Šฌ๋ผ์ด๋“œ ์ดํŽ™ํŠธ 02 - ์ขŒ๋กœ ์›€์ง์ด๊ธฐ

by ์ฝ”๋”ฉ๊ณต์ฑ… 2022. 8. 29.
๋ฐ˜์‘ํ˜•

์Šฌ๋ผ์ด๋“œ ์ดํŽ™ํŠธ 02

์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” ๊ทธ ๋™์•ˆ ๋ฐฐ์› ๋˜ JavaScript๋ฅผ ์ด์šฉํ•˜์—ฌ ์Šฌ๋ผ์ด๋“œ ์ดํŽ™ํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 2์ดˆ๋งˆ๋‹ค ๋‹ค์Œ ์‚ฌ์ง„์œผ๋กœ ์Šฌ๋ผ์ด๋“œ ๋˜๋Š” ํšจ๊ณผ์ด๋ฉฐ, JS ์ฝ”๋“œ์™€ GSAP, jQuery ์ฝ”๋“œ ์„ธ ๊ฐ€์ง€๋ฅผ ๋ณด์—ฌ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. HTML, CSS ์ฝ”๋“œ๋Š” ์›๋ณธ ์†Œ์Šค ๋ณด๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ํ™•์ธํ•ด์ฃผ์„ธ์š”.

์ž, ๊ทธ๋Ÿผ ์‹œ์ž‘ํ•ด๋ณผ๊นŒ์š”?


JS ์ฝ”๋“œ

์Šฌ๋ผ์ด๋“œ ์ดํŽ™ํŠธ 02์˜ JS ์†Œ์Šค์™€ ๋ถ€์—ฐ ์„ค๋ช…(์ฃผ์„ ์ฒ˜๋ฆฌ๋จ)์ด๋‹ค.

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(() => {
    currentIndex = (currentIndex + 1) % sliderCount;      //123401234...
            
    // if(currentIndex < 5) {
    //     currentIndex++;
    // } else {
    //     currentIndex = 0;
    // }

    // (currentIndex < 4) ? currentIndex++ : currentIndex = 0;

    console.log(currentIndex);

    sliderInner.style.transform = "translateX("+ -800 * currentIndex + "px)"
}, 2000);        

JS ์ฝ”๋“œ : ๊ฐ„๋žตํ™”

<script>
    const sliderInner = document.querySelector(".slider__inner");   // ์›€์ง์ด๋Š” ์˜์—ญ
    const slider = document.querySelectorAll(".slider");            // ์ด๋ฏธ์ง€
    let currentIndex = 0;   // ํ˜„์žฌ ์ด๋ฏธ์ง€

    sliderInner.style.transition = "all 0.6s";  // 0.6์ดˆ์”ฉ ๋ณ€ํ™”์ฃผ๊ธฐ
    setInterval(() => {
        currentIndex = (currentIndex + 1) % slider.length;

        sliderInner.style.transform = "translateX("+ -800 * currentIndex +"px)";
    }, 2000);
</script>

GSAP ์ฝ”๋“œ

<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.0/gsap.min.js"></script>

<script>
    const slider = document.querySelectorAll('.slider'); // ์ด๋ฏธ์ง€
    
    let currentIndex = 0;
    //let sliderCount = slider.length;
    
    setInterval(() => {
        currentIndex = (currentIndex + 1) % ".slider".length;
        // to ์„ ํƒ์ž document.write ์•ˆ์จ๋„ ์ธ์‹ ๊ฐ€๋Šฅ
        // ๋ฐ‘์—์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ์จ์ค„ ๊ฒƒ
        gsap.to(".slider__inner", {
            //duration : 0.6,
            x : -800 * currentIndex, // ๊ฐ์ฒด ์Šคํƒ€์ผ ๊ตฌ์กฐ
        });
    }, 2000);
</script>

jQuery ์ฝ”๋“œ

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>

<script>
    let currentIndex = 0;

    setInterval(() => {
        // $ = document.querySelector ๊ฐ„๋žตํ™”๋œ ํ‘œํ˜„
        currentIndex = (currentIndex + 1) % $(".slider").length;

        // $(".slider__inner").css(
        //     "transform", "translateX("+ -800 * currentIndex + "px)"
        // );

        $(".slider__inner").css("position", "relative");
        $(".slider__inner").animate({
            left: -800 * currentIndex
        }, 600);

    }, 2000);
</script>
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€


Reference Book

JavaScript
HTML
CSS
๊ด‘๊ณ  ์ค€๋น„์ค‘์ž…๋‹ˆ๋‹ค.