이미지 슬라이드쇼에 타이머 추가하기

이전에 이미지 전환 기능을 구현한 적이 있었는데, 이번에는 자동 재생을 위해 타이머를 추가해보았습니다. 코드를 살펴보겠습니다.

CSS 코드:

<style>
    ul { padding:0; margin:0; }
    li { list-style:none; }
    .container { width:400px; height:500px; position:relative;
        float: left;margin-right:60px; background:url(img/loader_ico.gif) no-repeat center #fff; }
    .container img { width:400px; height:500px; }
    .container ul { width:40px; position:absolute; top:0; right:-50px; }
    .container li { width:40px; height:40px; margin-bottom:4px; background:#666; }
    .container .active { background:#FC3; }
    .container span { top:0; }
    .container p { bottom:0; margin:0; }
    .container p,.container span { position:absolute; left:0; width:400px; height:30px; line-height:30px; text-align:center; color:#fff; background:#000; }
</style>

HTML 코드:

 <div class="container" id="imageSlider">
        ![]()
        <span>로딩 중...</span>
        <p>설명 텍스트 로딩 중...</p>
        
  </div>

이제 JavaScript 코드입니다:

window.onload = function() {
            var container = document.getElementById("imageSlider");
            var imageElement = container.getElementsByTagName("img")[0];
            var indicatorList = container.getElementsByTagName("ul")[0];
            var listItemElements = indicatorList.getElementsByTagName("li");
            var loadingSpan = container.getElementsByTagName("span")[0];
            var descriptionParagraph = container.getElementsByTagName("p")[0];
            var imageUrlArray = ["img/pic1.jpg", "img/pic2.jpg", "img/pic3.jpg", "img/pic4.jpg"];
            var descriptionArray = ["이미지 1", "이미지 2", "이미지 3", "이미지 4"];
            var currentIndex = 0;
            
            // ul에 li 요소 추가, 배열 길이만큼 생성
            for (var i = 0; i < imageUrlArray.length; i++) {
                indicatorList.innerHTML += "<li></li>";
            }

            <strong>// 타이머 설정
            var autoTimer = null;
            function startAutoPlay(){
                autoTimer = setInterval(function(){
                    currentIndex++;
                    currentIndex %= imageUrlArray.length;
                    updateDisplay();
                },1000);
            }
            startAutoPlay();

            container.onmouseover = function(){
                clearInterval(autoTimer);
            };
            container.onmouseout = startAutoPlay;</strong>// 주의: 이벤트 핸들러 호출 시 괄호를 사용하지 않아야 합니다. 함수 이름 뒤에 괄호를 붙이면 함수 실행 결과가 반환되며, 반환값이 없으면 undefined가 됩니다.

            // 초기화 함수
            function updateDisplay() {
                imageElement.src = imageUrlArray[currentIndex];
                descriptionParagraph.innerHTML = descriptionArray[currentIndex];
                loadingSpan.innerHTML = (currentIndex + 1) + "/" + imageUrlArray.length;
                for (var i = 0; i < listItemElements.length; i++) {
                    listItemElements[i].className = "";
                }
                listItemElements[currentIndex].className = "active";
            }
            updateDisplay();

            for (var i = 0; i < listItemElements.length; i++) {
                listItemElements[i].index = i;
                listItemElements[i].onclick = function () {
                    currentIndex = this.index;
                    updateDisplay();
                }
            }
    }

타이머 관련 코드는 볼드체로 표시했습니다. 특히 주의해야 할 점은 주석에 설명된 것처럼 이벤트 핸들러에 괄호를 붙이지 말아야 한다는 것입니다. 함수 이름에 괄호를 붙이면 해당 함수의 반환값이 되며, 반환값이 없는 경우 undefined가 됩니다.

오늘은 여기까지입니다. 피드백 환영합니다!

태그: JavaScript 타이머 이미지 슬라이드 웹 개발 자동재생

9월 14일 00:48에 게시됨