[JavaScript] 타이머 만들기 [타이머 기능 구현 / 시작, 정지 버튼]

2021. 5. 26. 20:03·Project/Timer Project
목차
  1. 개발 동기
  2. 계획
  3. 타이머 기능
  4. 문제 점
  5. 해결
  6. 결과
반응형

개발 동기

타이머 어플을 사용하여 공부 시간을 측정하고 있는데, 배우고 있는 JavaScript를 통해 타이머를 직접 만들고 싶다는 생각이 들어서 만들게 되었다.

계획

매초 1씩 증가하는 타이머 기능을 만들 예정이다.

버튼(button)을 이용하여 타이머의 시작, 정지, 초기화 기능을 나타내 줄 예정이다.

 


타이머 기능

let TIME = 0;

// 타이머 실행 버튼
function startButton() {
  updateTimer();
  stopButton();
  setInterval(updateTimer, 1000); // 매 초당 updateTimer 반복
}

//... 생략

// 타이머 증가 함수
function updateTimer(){
    const hours = Math.floor(TIME/3600);
    const checkMinutes = Math.floor(TIME/60); 
    const seconds = TIME % 60;
    const minutes = checkMinutes % 60;
    
    timer.innerText = `${hours < 10 ? `0${hours}` : hours}:${
        minutes < 10 ? `0${minutes}` : minutes}:${
        seconds < 10 ? `0${seconds}` : seconds}`;
    TIME++;
}

 


문제 점

setInterval() 함수를 담은 변수를 전달하는 방법은?

버튼을 여러번 누르면  setInterval()가 중복으로 적용된다, 해결 방법은?

 


해결

setInterval() 함수를 담은 변수를 전달하는 방법은? 
→ cron 변수를 만들어서 해결

버튼을 여러번 누르면  setInterval()가 중복으로 적용된다, 해결 방법은?
→ css로 start 버튼을 숨겨서 해결

 

[index.html]

/* 생략 */
  <body>
    <span class="timer js-timer">00:00:00</span>
    <input class="js-timer__startBtn" type="button" value="시작" />
    <input class="js-timer__stopBtn" type="button" value="정지" />
    <script src="timer.js"></script>
  </body>

 

[style.css]

.hide {
	display: none;
}

 

[timer.js]

const timer = document.querySelector('.js-timer'),
  stopBtn = document.querySelector('.js-timer__stopBtn'),
  startBtn = document.querySelector('.js-timer__startBtn'),


let TIME = 0;
let cron; // clearInterval을 위한 변수

function startButton() {
  updateTimer();
  stopButton();
  cron = setInterval(updateTimer, 1000);
  timer.classList.add('hide');
}

function stopButton() {
  clearInterval(cron);
  timer.classList.remove('hide');
}

function updateTimer(){
    const hours = Math.floor(TIME/3600);
    const checkMinutes = Math.floor(TIME/60); 
    const seconds = TIME % 60;
    const minutes = checkMinutes % 60;
    
    timer.innerText = `${hours < 10 ? `0${hours}` : hours}:${
        minutes < 10 ? `0${minutes}` : minutes}:${
        seconds < 10 ? `0${seconds}` : seconds}`;
    TIME++;
}
startBtn.addEventListener('click', startButton);
stopBtn.addEventListener('click', stopButton);

 


 

결과

계획하고 코드를 작성하면서 JavaScript 활용이 많이 미흡하다고 생각했다.
직접 하다보니 내가 이해한 부분과 아직 헷갈리는 부분을 알게 되어 앞으로 공부하는 데에 방향을 잡을 수 있을 것 같다고 생각한다.
현재로써는 직접 해보면서 얻는 배움이 개념을 공부하는것보다 훨씬 크다고 느끼게 되었다.

결과

 

반응형
  1. 개발 동기
  2. 계획
  3. 타이머 기능
  4. 문제 점
  5. 해결
  6. 결과
'Project/Timer Project' 카테고리의 다른 글
  • [React] state를 활용한 동적인 타이머 만들기 - 시작, 정지, 리셋 기능 구현
  • [React] 타이머 만들기 react-compound-timer 라이브러리 활용
  • [React] new Date(), state를 활용한 동적인 현재시간 나타내기
  • [JavaScript] 타이머 만들기 [배치 / 초기화버튼 / 마무리]
꾸매코더
꾸매코더
웹 / 앱 개발자
  • 꾸매코더
    꾸매코딩
    꾸매코더
  • 전체
    오늘
    어제
    • 분류 전체보기 (96)
      • JavaScript (18)
        • Deep Dive (0)
      • React (5)
      • React-Native (9)
      • CSS (3)
      • TypeScript (1)
      • CS (10)
      • GitHub (4)
      • Clone Coding (15)
        • Kakaotalk [HTML + CSS] (10)
        • Momentum [JavaScript] (5)
      • Project (30)
        • Timer Project (14)
        • Netflix [React + Hooks] (12)
        • ToDoList [React-Native] (4)
      • 회고 (1)
  • 링크

    • Github
  • hELLO· Designed By정상우.v4.10.3
꾸매코더
[JavaScript] 타이머 만들기 [타이머 기능 구현 / 시작, 정지 버튼]

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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