본문 바로가기

WEB/JavaScript

Js - 이미지 슬라이드

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>자바스크립트 이미지슬라이드</title>
    <style>
        #carousel01 { width: 100%; position: relative }

        .slide { width: 100%; height: 299px;
            display: flex; justify-content: center;
            align-items: center; position: absolute;
            z-index: 0; opacity: 0;
            transition: all 1s ease-in-out }
        /* 이미지 영역 지정, 이미지 가운데 정렬,
           모든 이미지 한곳에 포개어 배치, 투명하게 처리 */

        .showing { z-index: 1; opacity: 1 }
        /* 이미지를 표시하기 위한 설정 */
    </style>
</head>
<body>
    <h1>자바스크립트 이미지슬라이드</h1>
    <p>마치 유원지의 회전목마처럼 여러 이미지들을
        일정간격으로 번갈아 가며 보여주는 기능을 의미</p>

    <div id="carousel01">
        <div class="slide"><img src="/img/slide1.png"></div>
        <div class="slide"><img src="/img/slide2.png"></div>
        <div class="slide"><img src="/img/slide3.png"></div>
    </div>

    <script>
        const SHOWING = 'showing';
        const firstSlide = document.querySelector('.slide:first-child');

        let playslide = () => {
            const currentSlide = document.querySelector(`.${SHOWING}`);
            // 먼저, showing이라는 선택자를 가진 요소를 찾음

            if (!currentSlide) firstSlide.classList.add(SHOWING);
                // showing이라는 선택자를 가진 요소가 없으면
            // 첫번째 슬라이드에게 showing 선택자를 추가함
            else {
                currentSlide.classList.remove(SHOWING);
                // showing 선택자를 가진 요소에
                // showing 선택자를 제거함

                const nextSlide = currentSlide.nextElementSibling;
                // 현재 슬라이드 기준 다음 형제 슬라이드 요소를 가져옴

                if (nextSlide) nextSlide.classList.add(SHOWING);
                // 만약 다음 형제 슬라이드가 있다면 showing 선택자 추가
                else
                    firstSlide.classList.add(SHOWING);
                // 만약 다음 형제 슬라이드가 없다면
                // 첫번째 슬라이드에 showing 선택자 추가
            }
        };

        playslide();
        setInterval(playslide, 3000);
    </script>

</body>
</html>

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>자바스크립트 이미지슬라이드</title>
 <style>
        #carousel102 {position: relative;
            width: 1200px; height: 299px; overflow: hidden; }
            /* 캐러셀 전체 영역 지정*/

        ul {position: relative; list-style: none;
            width: 1200px; height: 299px; }
            /* 동그라미 제거*/
        li {position: relative; display: block; float: left;
            width: 1200px; height: 299px; }
            /* 캐러셀 각 개별 이미지 지정 */

    </style>

</head>
<body>
    <h1>자바스크립트 이미지슬라이드</h1>
    <p>마치 유원지의 회전목마처럼 여러 이미지들을 일정간격으로 번갈아 보여주는 기능</p>

    <hr>
    <div id ="carousel102">
        <ul>
            <li><img src="/img/slide1.png"></li>
            <li><img src="/img/slide2.png"></li>
            <li><img src="/img/slide3.png"></li>
        </ul>
    </div>

    <script>
        let ul = document.querySelector('ul');
        let width = document.querySelector('li').offsetWidth;
         // 각 li 요소가 차지하는 너비 계산
        let totalWidth = width * 3;

        ul.style.width = totalWidth + 'px';
        /* 슬라이드 이미지들을 한줄로 이어 붙이기 위해 너비 재조정 */

        let moveleftAnimate = ul.animate([
            {transform : 'translateX(0px)', offset:0.05 },  //x축으로 이동, 5초의 85%만큼 고정
            {transform : 'translateX(-1200px)'}],  //나머지 15%만큼 이동시간 가짐 (슬라이드크기1200px만큼)
                {duration:  5000 } );
        // 프레임별로 제어

        moveleftAnimate.onfinish=() => {
            let removeitem = ul.removeChild(ul.firstElementChild);
            ul.appendChild(removeitem);  // 첫번째 없애고 뒤에 다시 붙임
            moveleftAnimate.play();   // 애니메이트 반복
        };
    </script>











</body>
</html>

'WEB > JavaScript' 카테고리의 다른 글

Js - bootstrap semiProjects : 이용 약관 동의  (0) 2022.06.17
Js - 톰캣 이용한 AJAX  (0) 2022.06.17
Js - dropdown menu  (0) 2022.06.15
Js - modal  (0) 2022.06.15
Js - 브라우저 객체 2  (0) 2022.06.15