간단한 timer 만들기
클릭해서 답을 맞추는 간단한 퀴즈 게임을 만들다가 타이머 부분만 정리해보려고 한다. 실제 게임에서는 오디오 재생과 정답을 맞췄을 때 타이머가 잠깐 멈추고 틀렸을 때 타이머가 5초 깎이는 등의 기능이 더 있다.
만들어야 하는 기능
총 시간이 30초이고 타이머 바가 점점 줄어든다. 시간이 다 되면 얼럿 창이 뜬다. 타이머 시작, 일시정지, 재시작 기능을 만들어야 한다.
setInterval 시작하기, 일시 정지 하기(clearInterval 사용하기)
화면 구성
.timer
가 타이머 전체 영역이고 그 안에 있는 .bar
가 시간이 지남에 따라 점점 줄어들 것이다.
HTML
<div class="timer">
<div class="bar"></div>
</div>
<button id="btnStart">startTimer</button>
<button id="btnPause">pauseTimer</button>
<button id="btnRestart">restartTimer</button>
CSS
.timer {
height: 2rem;
background-color: lightgray;
position: relative;
}
.timer .bar {
position: absolute;
width: 100%;
height: 100%;
background-color: cyan;
top: 0;
right: 0;
}
setInterval 기능
200 ms 마다 남은 시간을 200 ms 줄이고, 타이머 바 길이도 줄어들게 하는 함수를 반복할 것이다. 일단 반복해야 하는 함수 timer
를 만든다.
const timeLimit = 30000 // 제한 시간
let timeLeft = timeLimit // 남은 시간
const timer = () => {
if (timeLeft <= 0) {
stopTimer() // 남은 시간이 0이면 반복 중지
alert('시간이 끝났습니다!')
}
timeLeft -= 200
$bar.style.width = timeLeft / timeLimit * 100 + '%'
}
timer를 반복한다. setInterval을 이용해서 반복하는데 이걸 workingTimer에 저장한다.
let workingTimer
const startTimer = () => { // 시작 버튼 누르면 이것 실행
workingTimer = setInterval(timer, 200)
}
clearInterval 기능
timer를 멈추고 싶으면 workingTimer 를 clearInterval 하면 된다.
const stopTimer = () => {
clearInterval(workingTimer)
}
다시 시작하려면 타이머를 멈추고, 남은 시간을 초기화하고, workingTimer에 다시 타이머 반복을 할당한다.
const restartTimer = () => {
stopTimer() // clearInterval(workingTimer)
timeLeft = timeLimit
startTimer() // workingTimer = setInterval(timer, 200)
}
최종 코드
See the Pen simple-timer by kabinny (@kabinny) on CodePen.
Leave a comment