연습문제 2

 

다음과 같은 동작은 HTML 문서와 JavaScript 프로그램을 작성하라.

 

  • 네이버 첫 화면의 "인기 검색어"와 비슷하게 여러 항목 중 한 항목만 특정 영역에 나오는 HTML 문서 작성
  • 여러 항목들이 특정 영역에 순차적으로 돌아가면서 나오도록 하는 JavaScript 프로그램 작성
  • transition 스타일 속성을 사용해 부드럽게 움직이도록 작성

 

<!DOCTYPE html>
<html>
    <head>
        <meta name="viewport" content="width=device-width">
        <meta charset="utf-8">
        <title>demo</title>
        <link rel="stylesheet" href="reset.css">
        <style>
            #container {
                width: 500px;
                height: 100px;
                margin: 100px auto;
                border: 5px solid rgb(6, 170, 6);
                overflow: hidden;
            }

            #rolling {
                background-color: #ddd;
            }

            #rolling > li {
                font-size: 28px;
                height: 100px;
                line-height: 100px;
                text-align: center;
            }

            #rolling > li > span {
                font-size: 30px;
                font-weight: 900;
                color: rgb(6, 170, 6);
                padding-right: 15px;
            }
        </style>
    </head>
    <body>
        <div id="container">
            <ul id="rolling">
                <li><span>1</span>Time is gold</li>
                <li><span>2</span>No sweat, no sweet</li>
                <li><span>3</span>Asking costs nothing</li>
                <li><span>4</span>Step by step goes a long way</li>
                <li><span>5</span>You will never know until you try</li>
            </ul>
        </div>

        <script>
            //------------------------------------------------------------------------------
            // 1. 일정한 시간마다
            // 2. #rolling 요소를 li 요소 하나의 높이만큼 위로 이동시킨다.
            // 3. #rolling 요소의 움직임이 끝나면
            // 4. #rolling 요소에 적용했던 스타일 속성을 제거하고
            // 5. #rolling 요소의 첫 번째 자식 요소를 #rolling 요소의 마지막으로 옮긴다.
            //------------------------------------------------------------------------------

            // 프로그램에서 참조하는 요소를 미리 탐색
            var rolling = document.getElementById("rolling");

            // 1. 일정한 시간마다
            //  → window.setInterval 메서드로 타이머를 등록해서 구현(2초마다 실행)
            window.setInterval(function () {
                
                // 2. #rolling 요소를 li 요소 하나의 높이만큼 위로 이동시킨다.
                rolling.style.marginTop = "-100px";
                rolling.style.transition = "0.4s";
                
                // 3. #rolling 요소의 움직임이 끝나면

                //  → #rolling 요소는 위에서 적용한 transition 스타일 속성 때문에 0.4초에 걸쳐
                //    움직임이 진행된다. 따라서 아래 기능들은 이 시간이 지난 후에 실행되어야 한다.

                //  → 0.4초가 지난 후에
                //  → window.setTimeout 메서드로 타이머를 등록해서 구현
                //    타이머를 실행하는 시간이 0.4초가 아닌 타이머에서 등록된 함수가 실행되는 시간이 0.4초
                //    즉, #rolling 요소에 적용된 스타일 속성이 0.4초(transition)동안
                //    실행된 후에 setTimeout 타이머에 등록된 함수가 실행된다.
                window.setTimeout(function () {

                    // 4. #rolling 요소에 적용했던 스타일 속성을 제거하고
                    rolling.removeAttribute("style");
                    // removeAttribute는 #rolling 요소에 적용되었던 inline 스타일 속성을 제거하기 위한 메서드
                    // → 여기서는 2가지의 스타일 속성을 제거하게 된다.
                    // rolling.style.marginTop = "";
                    // rolling.style.transition = "";

                    // 5. #rolling 요소의 첫 번째 자식 요소를 #rolling 요소의 마지막으로 옮긴다.
                    rolling.appendChild(rolling.firstElementChild);

                }, 400); // window.setTimeout
            }, 2000); // window.setInterval
        </script>
    </body>
</html>

 

연습문제 2의 결과