연습문제 1)

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

 

  • 네이버 첫 화면의 "인기 검색어"와 비슷하게 여러 항목 중 한 항목만 특정 영역에 나오는 HTML 문서의 작성
  • 여러 항목들이 특정 영역에 순차적으로 돌아가면서 나오도록 하는 JavaScript 프로그램의 작성

 

 

<!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;
                
                /* #roliing을 위로 이동시키기 위한 3가지 방법 중 position 스타일 속성을 주는 방법*/
                /* positon 스타일 속성의 기본값은 0이 아닌 auto이다.
                    auto로 그냥 둘 경우 원하는 스타일이 제대로 안나올 가능성이 높으므로
                    0으로 초기화 해주어야 한다. */
                position: relative;
                top: 0;
                
            }

            #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 요소를 위로 이동시킨다.

            //--------------------------------------------------------------
            // 프로그램에서 참조하는 요소를 미리 탐색
            var rolling = document.getElementById("rolling");
            // → 변수 rolling에는 DOM에 찾은, #rolling 요소를 표현하는 Element 객체가 대입된다
            //  그래서 이제부터 변수 rolling을 통해 #rolling 요소에 접근할 수 있다.

            // 인덱스 변수(index variable): 프로그램에서 규칙적으로 변하는 값을 표현하기 위해 사용하는 변수
            var i = 1;

            // 1. 일정한 시간마다
            //   → window.setInterval 메서드로 타이머를 등록해서 구현
            window.setInterval(function () {

                // 2. #rolling 요소를 위로 이동시킨다.
                //   → 이 함수가 실행될 때마다 항목들을 순차적으로 보여주기 위해 #rolling 요소의
                //     위치를 li 요소 하나만큼(100px) 계속 위로 이동시킨다.

                // 요소의 위치를 이동시킬 때 사용하는 스타일 속성
                // 1. margin 스타일 속성
                // 2. position 스타일 속성이 설정되었을 때 top, right, bottom, left 스타일 속성
                // 3. transform 스타일 속성의 translate 함수

                // margin-top: -100px, -200px, -300px, -400px, 0, -100px, -200px, ...
                // → 이렇게 규칙적으로 변하는 값을 표현하기 위해 인덱스 변수를 사용한다.
                // i = 1, 2, 3, 4, 0, 1, 2, ...

                // 1. margin 스타일 속성
                rolling.style.marginTop = (i *-100) + "px";
                // 크기를 설정하는 스타일 속성에는 반드시 단위까지 붙여서 값을 설정해야 한다.

                // 2. position 스타일 속성
                rolling.style.top = (i * -100) + "px";

                // 3. transform 스타일 속성
                rolling.style.transform = "translateY(" + (i * -100) + "px)";

                // 다음에 이 함수가 실행됐을 때를 위해 변수 i의 값 증가
                i++;

                // 변수 i의 값은 계속 증가할 수 없다. 만약 변수 i의 값이 5가 되면, 변수 i에 0을 대입한다.
                // if (i == 5) i = 0
                // if (i == rolling.children.length) i = 0; 
                i %= rolling.children.length;
                
            }, 2000);
        </script>
    </body>
</html>    

 

연습문제 1의 결과