[JavaScript] 자바스크립트로 아날로그 시간(시계) 표시하기

2022. 6. 13. 17:43Program/JavaScript

087_자바스크립트로 아날로그 시간(시계) 표시하기

[적용]

  • 아날로그 형식의 시계를 표시하고 싶을 때

[내용]

아날로그 시계를 구현하여 Date 객체를 좀 더 자세히 알아보자.

div 요소를 사용해 시계바늘의 컨테이너를 만든다.

원의 중심을 기준으로 각도를 계산하기 때문에 컨테이너를 사용하면 처리가 더욱 간단하다.

기본적인 상태는 바늘이 모두 12시를 가리키고 있다.

 

HTML                                                                                                                                                              index.html

<body>
    <div class="clock">
        <div class="lineHour"></div>
        <div class="lineMin"></div>
        <div class="lineSec"></div>
    </div>
</body>

CSS                                                                                                                                                                     style.css

body {background-color: #000000;}

.clock {
    border-radius: 50%;
    border: 3px solid white;
    width: 400px;
    height: 400px;
    background: rgba(255, 255, 255, 0.1);
    position: relative;
}

.lineHour {
    width: 10px;
    height: 150px;
    background: white;
    position: absolute;
    top: calc(50% - 150px);
    left: calc(50% - 5px);
    transform-origin: bottom;
}

.lineMin {
    width: 4px;
    height: 200px;
    background: blue;
    position: absolute;
    top: calc(50% - 200px);
    left: calc(50% - 2px);
    transform-origin: bottom;
}

.lineSec {
    width: 2px;
    height: 200px;
    background: red;
    position: absolute;
    top: calc(50% - 200px);
    left: calc(50% - 1px);
    transform-origin: bottom;
}

 

실행결과

 

 

현재 시간을 실시간으로 적용하기 위해 setInterval()을 사용한다.

new Date()를 사용해 현재 시간 정보를 가져오고, getSeconds()를 사용해 초 정보를 추출한다.

추출한 정보를 초침의 각도로 설정하며, 원은 360도이므로 1초당 6도(360도 / 60분할)가 된다.

 

분침과 시침 정보 역시 현재 시간 정보에서 가져온다. getHours()로 시간 단위(0~23)를 추출하고

getMinutes()로 분 단위(0~59)를 추출한다.

추출한 정보로 각도를 설정하지만, 시침은 다음과 같이 주의할 점이 있다.

  • 추출한 값은 0~23이지만, 아날로그 시계의 숫자는 0~11까지이다.
  • 시침은 시와 함께 분에 따라서도 각도가 변한다.

 

JavaScript                                                                                                                                                          main.js

setInterval(() => {
    // 현재 시간 가져오기
    const now = new Date();
    
    // 시간을 단위로 추출
    const h = now.getHours();  // 시간(0~23)
    const m = now.getMinutes();  // 분(0~59)
    const s = now.getSeconds();  // 초(0~59)
    
    // 시계 바늘의 각도 반영
    
    // 시침(시침은 시와 함께 분의 각도도 고려)
    const degH = h * (360 /12) + m * (360 / 12 / 60);
    // 분침
    const degM = m * (360 / 60);
    // 초침
    const degS = s * (360 / 60);
    
    const elementH = document.querySelector('.lineHour');
    const elementM = document.querySelector('.lineMin');
    const elementS = document.querySelector('.lineSec');
    
    elementH.style.transform = `rotate(${degH}deg)`;
    elementM.style.transform = `rotate(${degM}deg)`;
    elementS.style.transform = `rotate(${degS}deg)`;
}, 50);

 

실행결과

 


 

 

 

 

 

 

 

참조 :
실무에 바로 적용하는 자바스크립트 코드레시피 278
아케다 야스노부, 카노 타케시 지음 / 이춘혁 옮김