JAVASCRIPT

슬라이드 이펙트 두번째 !

Kim do hyun 2023. 4. 10. 13:20
728x90
반응형

슬라이드 이펙트 두번째

 

 

HTML

<body class="img02 bg02 font02">
    <header id="header">
        <h1>JAVASCRIPT</h1>
        <p>슬라이드 이펙트 기본적인 효과 : 트랜지션 효과</p>
        <ul>
            <li><a href="sliderEffect01.html">1</a></li>
            <li class="active"><a href="sliderEffect02.html">2</a></li>
            <li><a href="sliderEffect03.html">3</a></li>
            <li><a href="sliderEffect04.html">4</a></li>
            <li><a href="sliderEffect05.html">5</a></li>
        </ul>
    </header>
    <!-- header -->
    <main id="main">
        <div class="slider__wrap">
            <div class="slider__img">
                <div class="slider__inner">
                    <div class="slider"><img src="./img/Effect_bg01.jpg" alt="이미지1"></div>
                    <div class="slider"><img src="./img/Effect_bg02.jpg" alt="이미지2"></div>
                    <div class="slider"><img src="./img/Effect_bg03.jpg" alt="이미지3"></div>
                    <div class="slider"><img src="./img/Effect_bg04.jpg" alt="이미지4"></div>
                    <div class="slider"><img src="./img/Effect_bg05.jpg" alt="이미지5"></div>
                </div>   
            </div>
        </div>
    </main>
    <!-- main -->

    <footer id="footer">
        <a href="mailto:kshkmn0929@naver.com">kshkmn0929@naver.com</a>
    </footer>
    <!-- footer -->

 

CSS

<style>
    /* slider__wrap */
    .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;
        height: 450px;
    }
    .slider {   /* 개별적인 이미지 */
        position: relative;
        width: 800px;
        height: 450px;
    }
</style>

 

JAVASCRIPT

<script>
    // 선택자
    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;    // 이미지 갯수
    let sliderInterval = 3000;          // 이미지 간격 시간


</script>

<!-- javascript -->
<script>
    // 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
    // sliderInner.style.transform = translateX("-0px");       //-800 * 0

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

    // setInterval(() => {
    //     currentIndex = (currentIndex + 1) % sliderCount;    //1 2 3 4 0 1 2 3 4 5

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

<!-- GSAP -->  
<!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.5/gsap.min.js"></script>
<script>
    setInterval(() => {
        currentIndex = (currentIndex + 1) % sliderCount;

        gsap.to(".slider__inner", {
            x : -800 * currentIndex,
            duration : 1,
            ease: "elastic.out(1, 0.3)"
        })

    },sliderInterval);  //gpu를 이용하기 때문에 빠름(?)
</script> -->

<!-- jQuery -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min.js"></script>
<script>
    setInterval(() => {
        currentIndex = (currentIndex + 1) % $(".slider").length;

        $(".slider__inner").css("position", "relative");
        $(".slider__inner").animate({left : -800 * currentIndex}, 600, "easeOutElastic")
    }, sliderInterval)
</script>

자바스크립트 설명

이 코드는 자바스크립트를 사용하여 이미지 슬라이더의 동작을 구현하는 코드입니다.

먼저, sliderInner 요소의 transform 속성을 사용하여 이미지를 이동시킵니다. 이미지가 보이는 부분은 sliderInner 요소 내부에서 translateX 함수를 사용하여 -800px 만큼 이동합니다. 이때, currentIndex 변수는 현재 보이는 이미지의 인덱스를 나타냅니다.

이어서, sliderInner 요소의 transition 속성을 사용하여 이미지 전환 효과를 구현합니다. 이 속성은 all 0.6s로 설정되어 있으며, 모든 속성이 0.6초 동안 전환됩니다.

마지막으로, setInterval 함수를 사용하여 일정 시간마다 이미지를 전환하는 함수를 호출합니다. 이 함수에서는 currentIndex 변수를 업데이트하고, sliderInner 요소의 transform 속성을 사용하여 이미지를 이동시킵니다. 이때, translateX 함수 내부에는 -800 * currentIndex 값을 사용합니다. 이렇게 하면 currentIndex 변수의 값에 따라 이미지가 이동하게 됩니다.

이렇게 구현된 코드는 setInterval 함수를 사용하여 일정 시간마다 이미지를 전환하며, transition 속성을 사용하여 전환 효과를 구현합니다.

 

GSAP 설명

이 코드는 GreenSock Animation Platform (GSAP)을 사용하여 이미지 슬라이더의 동작을 구현하는 코드입니다.

먼저, setInterval 함수를 사용하여 일정 시간마다 이미지를 전환하는 함수를 호출합니다. 이 함수에서는 currentIndex 변수를 업데이트하고, gsap.to 함수를 사용하여 이미지를 이동시킵니다. 이때, ".slider__inner" 요소의 x 속성을 사용하여 이미지를 이동시키며, -800 * currentIndex 값을 사용합니다. duration 속성은 애니메이션의 지속 시간을 설정하며, ease 속성은 애니메이션의 이징을 설정합니다.

GSAP은 GPU 가속을 지원하므로, 자바스크립트로 구현된 애니메이션보다 더 빠른 성능을 보입니다. 따라서, 이 코드는 자연스러운 애니메이션 효과를 구현하면서도 빠른 속도로 이미지를 전환할 수 있습니다.

 

jQuery 설명

이 코드는 jQuery를 사용하여 이미지 슬라이더를 구현하는 코드입니다.

먼저, setInterval 함수를 사용하여 일정 시간마다 이미지를 전환하는 함수를 호출합니다. 이 함수에서는 currentIndex 변수를 업데이트하고, jQuery의 animate 함수를 사용하여 이미지를 이동시킵니다. 이때, ".slider__inner" 요소의 left 속성을 사용하여 이미지를 이동시키며, -800 * currentIndex 값을 사용합니다. animate 함수의 두 번째 매개변수는 애니메이션의 지속 시간을 설정하며, 세 번째 매개변수는 애니메이션의 이징을 설정합니다.

jQuery는 기본적으로 GPU 가속을 지원하지 않으므로, GSAP과 같은 성능을 보이지는 않습니다. 그러나, 간단한 애니메이션을 구현할 때는 jQuery가 더 쉽게 사용될 수 있습니다. animate 함수는 다양한 옵션을 지원하므로, 다양한 애니메이션 효과를 쉽게 구현할 수 있습니다.