๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
EFFECT

[EFFCET] ์ด๋ฏธ์ง€ : ์Šฌ๋ผ์ด๋“œ ์œ ํ˜•02

by _ํ† ๋งคํ†  2022. 8. 30.
728x90

์ด๋ฏธ์ง€ ์Šฌ๋ผ์ด๋“œ : ์ขŒ์ธก์œผ๋กœ ์›€์ง์ด๊ธฐ

์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” 2์ดˆ ์ง€๋‚  ๋•Œ๋งˆ๋‹ค ์ขŒ์ธก์œผ๋กœ ์ด๋ฏธ์ง€๊ฐ€ ๋ฐ”๋€Œ๋Š” ์Šฌ๋ผ์ด๋“œ ํ˜•์‹์˜ ํŽ˜์ด์ง€๋ฅผ ์ž‘์—…ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.๐Ÿ˜€


#1. HTML / CSS ์„ค์ •ํ•˜๊ธฐ

! HTML TIP !
๊ฐ ์ด๋ฏธ์ง€๋งˆ๋‹ค css์„ค์ •์„ ์ฃผ๊ธฐ ์œ„ํ•ด ๋”ฐ๋กœ ๋ถ€๋ชจ๋ฅผ 2๋ฒˆ ๊ฐ์‹ธ์„œ ๋ฌถ์–ด์ค๋‹ˆ๋‹ค.

โœ๏ธ HTML ์Šคํฌ๋ฆฝํŠธ ๋ณด๊ธฐ
<section id="sliderType02">
    <div class="slider__wrap">
        <div class="slider__img">
            <div class="slider__inner">
                <div class="slider">
                    <img src="../assets/img/Mountian_bg01.jpg" alt="์ด๋ฏธ์ง€6">
                </div>
                <div class="slider">
                    <img src="../assets/img/Mountian_bg02.jpg" alt="์ด๋ฏธ์ง€7">
                </div>
                <div class="slider">
                    <img src="../assets/img/Mountian_bg03.jpg" alt="์ด๋ฏธ์ง€8">
                </div>
                <div class="slider">
                    <img src="../assets/img/Mountian_bg04.jpg" alt="์ด๋ฏธ์ง€9">
                </div>
                <div class="slider">
                    <img src="../assets/img/Mountian_bg05.jpg" alt="์ด๋ฏธ์ง€10">
                </div>
            </div>
        </div>
    </div>
</section>

! CSS TIP !
์ด๋ฏธ์ง€๋ฅผ ๊ฐ€๋กœ๋กœ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํฌ์ง€์…˜์„ relative๋กœ ์„ค์ •ํ•˜๊ณ  ์˜์—ญ์—์„œ ๋ฒ—์–ด๋‚˜๋Š” ์ด๋ฏธ์ง€๋ฅผ ์•ˆ๋ณด์ด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด overflow: hidden์„ ์„ค์ •ํ•ด์ค๋‹ˆ๋‹ค.

โœ๏ธ CSS ์Šคํฌ๋ฆฝํŠธ ๋ณด๊ธฐ
/* slider */
.slider__wrap {
    width: 100%;
    height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
}
.slider__img {  /* ์ด๋ฏธ์ง€๊ฐ€ ๋ณด์ด๋Š” ์˜์—ญ */
    position: relative;
    width: 800px;
    height: 450px;
    overflow: hidden;
}
.slider__inner {/* ์ „์ฒด ์ด๋ฏธ์ง€๋ฅผ ๊ฐ์‹ธ๊ณ  ์žˆ๋Š” ๋ถ€๋ชจ : ์›€์ง์ด๋Š” ๋ถ€๋ถ„ ์†์„ฑ์ฃผ๊ธฐ */
    display: flex;
    flex-wrap: wrap;
    width: 4000px;
}
.slider {   /* ๊ฐœ๋ณ„์ ์ธ ์ด๋ฏธ์ง€ (๊ฐ๊ฐ์˜ ์ด๋ฏธ์ง€ ์„ค์ •) */
    position: relative;
    width: 800px;
    height: 450px;
}
.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: '์ด๋ฏธ์ง€6';}
.slider:nth-child(2)::before {content: '์ด๋ฏธ์ง€7';}
.slider:nth-child(3)::before {content: '์ด๋ฏธ์ง€8';}
.slider:nth-child(4)::before {content: '์ด๋ฏธ์ง€9';}
.slider:nth-child(5)::before {content: '์ด๋ฏธ์ง€10';}
/* ์Šฌ๋ผ์ด๋”๊ฐ€ ํฌ์ง€์…˜์œผ๋กœ ๊ณ ์ •๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์œ„์น˜ ๋ฐ”๊ฟ”์ฃผ๊ธฐ */
.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 sliderInner = sliderWrap.querySelector(".slider__inner");      //์›€์ง์ด๋Š” ์˜์—ญ
    const slider = sliderWrap.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 : 800์€ ์ด๋ฏธ์ง€์˜ width๊ฐ’์ด๋‹ค.        

    // //์ด๋ฏธ์ง€ ์›€์ง์ด๊ธฐ ์กฐ๊ฑด๋ฌธ ver.
    setInterval(()=> {
        if(currentIndex < slider.length -1){ //์›€์ง์ด๋Š” ์˜์—ญ์ธ sliderInner๋Š” ์˜์—ญ์ด ํ•œ๊ฐœ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ๊ฐ์˜ ์ด๋ฏธ์ง€๊ฐ€ ์›€์ง์ด๋„๋ก ์Šฌ๋ผ์ด๋“œ์˜ ์ด ๊ธธ์ด๋ฅผ ์‹์— ์จ์ฃผ์–ด์•ผ ํ•œ๋‹ค.
            //์Šฌ๋ผ์ด๋“œ์˜ ๊ธธ์ด๊ฐ€ 4์ด๊ณ  currentIndex๊ฐ€ 4๋ณด๋‹ค ์ž‘์„ ๋•Œ ํ•˜๋‚˜์”ฉ ์˜ฌ๋ฆฌ๊ธฐ (์ธ๋ฑ์Šค๋ผ 0๋ถ€ํ„ฐ ์„ธ๊ธฐ ๋•Œ๋ฌธ์— 0~4 = 5๊ฐœ์˜ ์ด๋ฏธ์ง€๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ.)
            currentIndex ++;
            //์•„๋‹Œ ๊ฒฝ์šฐ ๋‹ค์‹œ 0์œผ๋กœ ๋Œ์•„์˜ค๋„๋ก ํ•œ๋‹ค.
        } else { 
            currentIndex = 0;
        }
        //์กฐ๊ฑด๋ฌธ์„ ํ†ตํ•ด currentIndex๊ฐ€ ๋งˆ์ง€๋ง‰ ์ด๋ฏธ์ง€์—์„œ ์ฒ˜์Œ ์ด๋ฏธ์ง€๋กœ ๋‹ค์‹œ ๋Œ์•„์˜ค๋„๋ก ์„ค์ •ํ•ด์ค€ ๋’ค css์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„์† ๋ฐ˜๋ณต๋˜๋„๋ก ์„ค์ •ํ•œ๋‹ค.
            sliderInner.style.transform = "translateX("+ -800 * currentIndex + "px)";
    },2000);
}

{
    //์ด๋ฏธ์ง€ ์›€์ง์ด๊ธฐ ๋‚˜๋ˆ—์…ˆ ver. : ์ œ์ผ ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•
    const sliderInner = document.querySelector(".slider__inner");
    const slider = document.querySelectorAll(".slider");
    let currentIndex = 0;

    sliderInner.style.transition = "all 0.6s";

    setInterval(()=> {
        currentIndex = (currentIndex +1) % slider.length;

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

{
    //GASP : ์›น ์†Œ์Šค๋ฅผ ์ด์šฉํ•œ ์ž‘์—… : ๊ฐ„๋‹จ ๋ฐฉ๋ฒ•

    src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.0/gsap.min.js" //๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

    const slider = document.querySelectorAll(".slider");     
    let currentIndex = 0;

    setInterval(() => {
        currentIndex = (currentIndex + 1) % slider.length;

        gsap.to(".slider__inner", {
                x : -800 * currentIndex
        });
    },2000);
}

{
    //JQuery : ๋Œ€๋ถ€๋ถ„์˜ ํผ๋ธ”๋ฆฌ์…”๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด์ง€๋งŒ ๋น„์ถ”. ์ œ์ด์ฟผ๋ฆฌ์˜ ์‚ฌ์šฉ์„ฑ์ด ๋–จ์–ด์ง€๋Š” ์ถ”์„ธ.

    src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" //๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

    let currentIndex = 0;

        setInterval(() => {
            currentIndex = (currentIndex + 1) % $(".slider").length;

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

โœ๏ธ ์Šคํฌ๋ฆฝํŠธ ๋ณด๊ธฐ : ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด ์ž‘์„ฑํ•œ ์Šคํฌ๋ฆฝํŠธ ์ž…๋‹ˆ๋‹ค.
1. ๋จผ์ € ์ง€๊ธˆ๊นŒ์ง€ ํ–ˆ๋˜ ๋ฐฉ์‹๊ณผ ๋˜‘๊ฐ™์ด ์Šคํฌ๋ฆฝํŠธ์— ํ•„์š”ํ•œ ์„ ํƒ์ž๋ฅผ ์„ค์ •ํ•ด์ฃผ๊ณ  ํ˜„์žฌ ๋ณด์—ฌ์•ผํ•  ์ด๋ฏธ์ง€์—๊ฒŒ 0์„ ๋ถ€์—ฌํ•˜์—ฌ ์ฒซ ์ˆœ์„œ๊ฐ€ ๋˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
2. ์ด๋ฏธ์ง€๋ฅผ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ๋„˜์–ด๊ฐ€๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์Šคํฌ๋ฆฝํŠธ๋กœ css ์†์„ฑ์ธ transition = "all 0.6s"์„ ์„ค์ •ํ•ด์ค๋‹ˆ๋‹ค.
3. setInterval()๋ฅผ ํ†ตํ•ด slider.length(์ด ์ด๋ฏธ์ง€ ๊ฐฏ์ˆ˜)๋งŒํผ ๋งŒ ๋ณด์ด๊ฒŒ ํ•˜๊ณ  4๊นŒ์ง€ ๊ฐ”์„ ๋•Œ ๋‹ค์‹œ ๋˜๋Œ์•„๊ฐ€๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
4. ์Šคํฌ๋ฆฝํŠธ๋กœ css์˜ transform ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ 2์ดˆ๋งˆ๋‹ค X์ถ•(translateX) ๋ฐฉํ–ฅ์œผ๋กœ -800px์”ฉ ์ด๋ฏธ์ง€๊ฐ€ ์ด๋™ํ•˜๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

const sliderInner = document.querySelector(".slider__inner");
const slider = document.querySelectorAll(".slider");

let currentIndex = 0;

        sliderInner.style.transition = "all 0.6s";

        setInterval(()=> {
            currentIndex = (currentIndex +1) % slider.length;

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

โœ๏ธ ์Šคํฌ๋ฆฝํŠธ ๋ณด๊ธฐ : GSAP

GSAP ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ ์Šคํฌ๋ฆฝํŠธ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ณด๋‹ค ๊ฐ€๋…์„ฑ์ด ์ข‹๊ณ  ๊ฐ„ํŽธํ•ฉ๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋งํฌ๋ฅผ ๋ถ™์ธ ํ›„ ์Šคํƒ€์ผ ๋ฐ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์‰ฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.0/gsap.min.js" //๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

const slider = document.querySelectorAll(".slider");     
let currentIndex = 0;

setInterval(() => {
    currentIndex = (currentIndex + 1) % slider.length;

    gsap.to(".slider__inner", {
            x : -800 * currentIndex
    });
},2000);

โœ๏ธ ์Šคํฌ๋ฆฝํŠธ ๋ณด๊ธฐ : JQuery

์ œ์ด์ฟผ๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์„ฑํ•ด์ค๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ณด๋‹ค ๊ฐ€๋…์„ฑ์€ ์ข‹์ง€๋งŒ ํ˜„์žฌ ์‚ฌ์šฉ์„ฑ์ด ๋–จ์–ด์ง€๋Š” ์ถ”์„ธ ์ž…๋‹ˆ๋‹ค.
$()๋กœ ์„ ํƒ์ž ๋ฐ css ์†์„ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" //๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

let currentIndex = 0;

setInterval(() => {
    currentIndex = (currentIndex + 1) % $(".slider").length;

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

#4. ๊ฒฐ๊ณผ ๋ณด๊ธฐ

728x90

๋Œ“๊ธ€


Lucky Charms Rainbow
js
html
css