freddy
느낌으로 남지않기
freddy
전체 방문자
오늘
어제
  • 분류 전체보기 (28)
    • HTML (2)
    • CSS (1)
    • JavaScript (8)
    • WebGL (0)
    • 개념정리 (0)
    • React (2)
    • ReactNative (4)
    • ERROR.LOG (3)
    • 설치 (2)
    • 챌린지 (0)
    • 책 (0)
    • 세미나 (2)
    • 일기장 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • bitnami ubuntu
  • Nullish coalescing operator
  • Destructuring assignment
  • javascript 최신문법
  • 프론트엔드
  • 브라우저 동작 원리
  • React-Native
  • 리액트의 필요성
  • Shorthand property names
  • 앱이 계속 중지됨
  • BOM 이란?
  • react 사용하는 이유
  • javscript 기초
  • React Native
  • react
  • css variables
  • react 기초
  • es11
  • 최신JS문법
  • javascript30
  • react 특징
  • evnet 위임
  • Optional chainning
  • JS
  • javascript 이벤트 위임
  • Github Actions
  • 값식문
  • Spread syntax
  • JavaScript
  • em과rem차이

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
freddy
JavaScript

CSS + JS Clock 정리

JavaScript

CSS + JS Clock 정리

2020. 12. 22. 09:16
반응형

요구 사항

CSS 와 JavaScript를 이용하여 시,분,초 를 각각 동적으로 움직이게 구현한다.

기본 소스코드

<div class="clock">
  <div class="clock-face">
    <div class="hand hour-hand"></div>
    <div class="hand min-hand"></div>
    <div class="hand second-hand"></div>
  </div>
</div>
    html {
      background: #018DED url(http://unsplash.it/1500/1000?image=881&blur=5);
      background-size: cover;
      font-family: 'helvetica neue';
      text-align: center;
      font-size: 10px;
    }

    body {
      margin: 0;
      font-size: 2rem;
      display: flex;
      flex: 1;
      min-height: 100vh;
      align-items: center;
    }

    .clock {
      width: 30rem;
      height: 30rem;
      border: 20px solid white;
      border-radius: 50%;
      margin: 50px auto;
      position: relative;
      padding: 2rem;
      box-shadow:
        0 0 0 4px rgba(0,0,0,0.1),
        inset 0 0 0 3px #EFEFEF,
        inset 0 0 10px black,
        0 0 10px rgba(0,0,0,0.2);
    }

    .clock-face {
      position: relative;
      width: 100%;
      height: 100%;
      transform: translateY(-3px); /* account for the height of the clock hands */
    }

    .hand {
      width: 50%;
      height: 6px;
      background: black;
      position: absolute;
      top: 50%;
    }

처리과정 & 코드분석

  1. setDate () 함수를 생성하고 setInterval을 이용하여 1000ms 초마다 실행함.

     setInterval(setDate, 1000);
  2. 'now' 변수에 현재 시간을 할당함.

     const now = new Date();
  3. now.getSeconds() 를 이용하여 초를 얻어 seconds 변수에 할당 하였고

     const seconds = now.getSeconds();
  4. secondsDegrees변수에 초를 움직일 때 마다의 각도를 계산하는 식을 작성하여 할당 함

    const secondsDegrees = (seconds / 60) * 360 + 90;
    • 계산식은 60초로 현재 초를 나눴고 360을 곱해줬다 곱해준 이유는 360도에서 현재의 각도를 계산하기 위해서 + 90 을 한 이유는 css에서 transform: rotate(90deg); 으로 설정을 해서 각도를 맞추기 위해서 + 90 해서 180으로 맞춰줬다.
  5. 동적으로 값을 변경하기 위해서 타겟을 잡은 후(secondHand 변수 선언) 이 변수에 style.transform = rotate()를 해 주었다. 동적으로 들어가는 값은 위에서 계산한 'secondsDegrees' 이다.

    secondHand.style.transform = `rotate(${secondsDegrees}deg)`;
  6. 시간과 분도 같은 방식으로 작성함

결과

  <script>
      const secondHand = document.querySelector('.second-hand');
      const minsHand = document.querySelector('.min-hand');
      const hourHand = document.querySelector('.hour-hand');

      function setDate() {
        const now = new Date();
        const seconds = now.getSeconds();
        const secondsDegrees = (seconds / 60) * 360 + 90;
        secondHand.style.transform = `rotate(${secondsDegrees}deg)`;

        const mins = now.getMinutes();
        const minsDegrees = (mins / 60) * 360 + 90;
        minsHand.style.transform = `rotate(${minsDegrees}deg)`;

        const hour = now.getHours();
        const hourDegrees = (hour / 12) * 360 + 90;
        hourHand.style.transform = `rotate(${hourDegrees}deg)`;

        console.log(hour, mins, seconds);
      }

      setInterval(setDate, 1000);
    </script>

결과

찾아본 내용

transform-origin

변형 된 요소의 위치를 변경할 수 있고 2D변형은 요소의 x축과 y축을 변경할 수 있습니다. 3D 변형은 요소의 z축을 변경할 수도 있습니다.

transform

transform 속성을 사용함으로써, CSS의 시각적 서식 모델(visual formatting model)의 좌표 공간을 변형시킬 수 있다. 해당 속성에 지정된 값에 따라 엘리먼트(element)에 이동(translate), 회전(rotate), 크기변경(scale), 기울임(skew)등의 효과를 줄 수 있다.
반응형

'JavaScript' 카테고리의 다른 글

꼭! 알아야하는 JavaScript 최신문법 (ES6, ES11) 사용법 정리 (1)  (0) 2020.12.22
JavaScript 30 Drum Kit 정리  (0) 2020.12.22
CSS Variables  (0) 2020.12.22
JavaScript 값, 식, 문,Primitive Type & Reference Type  (0) 2020.12.22
Array의 여러가지(filter, map, reduce, sort, ...) 메소드를 활용해보자.  (0) 2020.12.21
  • 요구 사항
  • 처리과정 & 코드분석
  • 결과
  • 찾아본 내용
  • transform-origin
  • transform
'JavaScript' 카테고리의 다른 글
  • JavaScript 30 Drum Kit 정리
  • CSS Variables
  • JavaScript 값, 식, 문,Primitive Type & Reference Type
  • Array의 여러가지(filter, map, reduce, sort, ...) 메소드를 활용해보자.
freddy
freddy

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.