본문 바로가기
JAVASCRIPT

슬라이드 이펙트 : 트랜지션 효과

by dongjin6539 2023. 4. 10.
728x90
반응형

슬라이드 이펙트 : 트랜지션 효과

 

수업 시간에 배운 내용을 복습하면서 해보겠습니다.

코드 보기(HTML, JAVASCRIPT / CSS1 / CSS2) / 완성화면

 

 

코드 블럭

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>01. 슬라이드 이펙트</title>

    <link rel="stylesheet" href="css/reset.css">
    <link rel="stylesheet" href="css/slider.css">

    <!-- 파비콘 -->
    <link rel="shortcut icon" type="image/x-icon" href="ico/favicon.png"/> 
    <link rel="apple-touch-icon" sizes="114x114" href="ico/favicon.png"/>
    <link rel="apple-touch-icon" href="ico/favicon.png"/>

    <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 {
            position: absolute;
            left: 0;
            top: 0;
            transition: 0.3s all;
        }
        .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;}
    </style>
</head>
<body class="img01 bg01 font01">
    <header id="header">
        <h1>Javascript slider Effect01</h1>
        <p>슬라이드 이펙트</p>
        <ul>
            <li class="active"><a href="sliderEffect01.html">1</a></li>
            <li><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>
            <li><a href="sliderEffect06.html">6</a></li>
        </ul>
    </header>
    <!-- //header -->

    <main id="main">
        <div class="slider__wrap">
            <div class="slider__img">
                <div class="slider"><img src="./img/sliderEffect01-min.jpg" alt="이미지1"></div>
                <div class="slider"><img src="./img/sliderEffect02-min.jpg" alt="이미지2"></div>
                <div class="slider"><img src="./img/sliderEffect03-min.jpg" alt="이미지3"></div>
                <div class="slider"><img src="./img/sliderEffect04-min.jpg" alt="이미지4"></div>
                <div class="slider"><img src="./img/sliderEffect05-min.jpg" alt="이미지5"></div>
            </div>
        </div>
    </main>
    <!-- //main -->

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

구성

  • 코드는 간단하게 header 구역 부분에 제목 태그, 목록 태그를 사용해서 텍스트를 입력해줍니다.
  • main 구역에는 이미지 태그를 사용해 각각 이미지를 입력해줍니다.
  • css는 유형별로 공통으로 사용될 스타일은 파일로 따로 만들어서 링크 태그를 사용해 가지고 와서 입력해주고 유형별로 다르게 사용될 스타일은 각각의 코드 구성하는데 입력해줍니다.
  • style 구역으로 이동해서 첫번째 이미지, 두번째 이미지, 세번째 이미지, 네번째 이미지, 다섯번째 이미지 순서대로 나오게 하기 위해 nth-child(n)을 사용해서 z-index 값을 차례대로 입력해줍니다.

 

CSS

 

JAVASCRIPT

<script>
    // 선택자
    const sliderWrap = document.querySelector(".slider__wrap");
    const sliderImg = sliderWrap.querySelector(".slider__img");
    const slider = sliderWrap.querySelectorAll(".slider");

    let currentIndex = 0;               // 현재 보이는 이미지
    let sliderCount = slider.length;    // 이미지 갯수
    let sliderInterval = 3000;          // 이미지 변경 간격 시간

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

        slider[currentIndex].style.opacity = "0";
        slider[nextIndex].style.opacity = "1";

        currentIndex = nextIndex;
    }, sliderInterval);

    // // 첫번째 이미지를 안보이게, 두번째 이미지를 보이게
    // slider[0].style.opacity = "0";
    // slider[1].style.opacity = "1";

    // // 두번째 이미지를 안보이게, 세번째 이미지를 보이게
    // slider[1].style.opacity = "0";
    // slider[2].style.opacity = "1";

    // // 세번째 이미지를 안보이게, 네번째 이미지를 보이게
    // slider[2].style.opacity = "0";
    // slider[3].style.opacity = "1";

    // // 네번째 이미지를 안보이게, 다섯번째 이미지를 보이게
    // slider[3].style.opacity = "0";
    // slider[4].style.opacity = "1";

    // // 다섯번째 이미지를 안보이게, 첫번째 이미지를 보이게
    // slider[4].style.opacity = "0";
    // slider[0].style.opacity = "1";
</script>

자바스크립트 구성

  • 각각 필요한 부분의 태그를 선택자로 만들어줍니다.
  • 변수를 추가로 저장해줍니다. 현재 보이는 이미지를 currentIndex로 0을 저장해주고, 이미지의 갯수는 sliderCount로 이미지 부부분을 선택자로 만들어둔 slider를 사용해서 slider.length를 저장해주고, 이미지 변경 경과 시간을 sliderInterval로 3000(3초)를 저장해줍니다.
  • 먼저 주석 처리되어있는 곳을 보면 첫번째 이미지를 가지고 오려면 배열의 데이터를 불러오는 형식으로 slider[0]으로 불러와줍니다. 그럼 두번째 이미지 slider[1]. 세번째 이미지 slider[2], 네번째 이미지 slider[3], 다섯번째 이미지 slider[4]로 입력해줍니다.
  • 바로 스타일을 주기 위해 각각 slider[ ].style.opacity = " "을 입력해줍니다. 
  • opacity는 불투명도를 나타냅니다.
  • 그래서 위와 같이 예시로 첫번째 이미지를 안보이게 하고, 두번째 이미지를 보이게 하려면 slider[0].style.opacity="0", slider[1].style.opacity="1"을 입력해주면 됩니다.
  • 하나씩 다 입력할 순 없으니 setInterval 함수를 사용해서 입력해줍니다. 
  • 이미지의 배열의 데이터를 위와 같이 주석 처리한 값으로 나오게 하려면 일단 먼저 nextIndex로 변수를 저장해주는데 currentIndex의 처음 데이터가 0이므로 +1을 해주고 이미지 전체 갯수 sliderCount로 나눈 나머지 값을 저장하게 해줍니다. 그러면 nextIndex의 데이터는 1이 됩니다.
  • 그 다음은 currentIndex의 데이터가 1로 저장되게끔 1을 가지고 있는 nextIndex가 있으므로 currentIndex=nextIndex;로 입력해줍니다.
  • 그럼 값은 나왔으므로 예시로 적었던 부분을 사용해서 slider[currentIndex].style.opacity="0";, slider[nextIndex].style.opacity="1";을 입력해주면 됩니다.

 

GSAP, jQuery

GSAP

<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.5/gsap.min.js"></script>
<script>
    // 선택자
    const sliderWrap = document.querySelector(".slider__wrap");
    const sliderImg = sliderWrap.querySelector(".slider__img");
    const slider = sliderWrap.querySelectorAll(".slider");

    let currentIndex = 0;               // 현재 보이는 이미지
    let sliderCount = slider.length;    // 이미지 갯수
    let sliderInterval = 3000;          // 이미지 변경 간격 시간
    
    setInterval(() => {
        let nextIndex = (currentIndex + 1) % sliderCount;

        gsap.to(slider[currentIndex], {
            opacity: "0"
        });
        gsap.to(slider[nextIndex], {
            opacity: "1"
        });

        currentIndex = nextIndex;
    },sliderInterval);
</script>

GSAP 구성

  • JAVASCRIPT와 구성은 비슷합니다.
  • 먼저 GSAP의 cdn링크를 홈페이지를 통해 가지고 와줍니다.(https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.5/gsap.min.js)
  • setInterval 함수 안에만 좀 다릅니다.
  • 함수 안에 필요한 변수 nextIndex의 값은 똑같이 구해줍니다.
  • gsap 라이브러리를 사용하기 위해서는 .to( )를 사용해서 해야합니다.
  • ( )안에는 slider 이미지 선택자와 배열로 데이터를 가져오는 방법을 사용해서 값을 가진 변수 currentIndex와 변수 nextIndex의 값을 입력해줍니다.
  • 두개의 데이터가 필요하므로 각각 gsap.to(slider[currentIndex], {opacity:"0"});, gsap.to(slider[nextIndex], {opacity:"1"});을 입력해줍니다.
  • 추가로 nextIndex의 값이 위의 변수 nextIndex의 식에 변수 currentIndex로 저장되게끔 해주기 위해 currentIndex=nextIndex;를 입력해줍니다.

 

jQuery

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script>
    // 선택자
    const sliderWrap = document.querySelector(".slider__wrap");
    const sliderImg = sliderWrap.querySelector(".slider__img");
    const slider = sliderWrap.querySelectorAll(".slider");

    let currentIndex = 0;               // 현재 보이는 이미지
    let sliderCount = slider.length;    // 이미지 갯수
    let sliderInterval = 3000;          // 이미지 변경 간격 시간
    
    setInterval(() => {
        let nextIndex = (currentIndex + 1) % $(".slider").length;

        $(slider[currentIndex]).animate({opacity: 0}, 600);
        $(slider[nextIndex]).animate({opacity: 1}, 600);

        currentIndex = nextIndex;
    }, sliderInterval);
</script>

jQuery 구성

  • JAVASCRIPT와 구성은 비슷합니다.
  • 먼저 jQuery의 링크를 홈페이지를 통해 가지고 와줍니다.(https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js)
  • setInterval 함수 안에만 좀 다릅니다.
  • 함수 안에 필요한 변수 nextIndex의 값은 똑같이 구해줍니다.
  • jQuery는 선택자를 따로 만들지 않고 간단하게 입력이 가능합니다. $(".클래스명")
  • jQuery는 animate를 사용해서 opacity 불투명도 속성을 사용해서 값을 입력시킬 수 있습니다.
  • 두개의 데이터가 필요하므로 각각 $(slider[currentIndex]).animate({opacity:"0"});, $(slider[nextIndex].animate({opacity:"1"});을 입력해줍니다.
  • 추가로 nextIndex의 값이 위의 변수 nextIndex의 식에 변수 currentIndex로 저장되게끔 해주기 위해 currentIndex=nextIndex;를 입력해줍니다.

 

참고

  • 속성, 메서드
속성, 메서드 설명
setInterval( ) 각 호출 사이에 고정된 시간 지연으로 함수를 반복적으로 호출하거나 코드 스니펫을 실행합니다.
opacity
요소의 불투명도를 설정합니다. 
불투명도는 요소 뒤의 콘텐츠가 숨겨지는 정도이며 투명도의 반대입니다.
GSAP
jQuery
728x90
반응형