순수 html 과 js 를 통해 구현한 코드로 최신 트렌드 언어인 react.js 기반으로 구현한 내용입니다.이는 서로간의 코드를 비교해 보는 것도 배우는데 많은 도움이 될 수 있습니다.
html 내용
<div class="container"> <div id="result"> </div> </div> <button onclick="start()">Start</button>
js 내용
function start() { let duration = 2; let endTime = new Date(); endTime.setMinutes(endTime.getMinutes() + duration); let min = duration; sec = 0; let resultDiv = document.getElementById("result"); let interval = setInterval(() => { sec--; if (sec == -1) { sec = 59; min--; } resultDiv.innerHTML = min.toLocaleString('en-US', { minimumIntegerDigits: 2, useGrouping: false }) + ":" + sec.toLocaleString('en-US', { minimumIntegerDigits: 2, useGrouping: false }); if ((min == 0) && (sec == 0)) { clearInterval(interval); } }, 1000); }
App.js
import React from "react"; import "./style.css"; import Timer from './Timer'; export default function App() { return ( <div> <Timer/> </div> ); }
Timer.js
import React, { useEffect, useState } from 'react'; export default function Timer() { const [time, setTime] = useState(); useEffect(() => { let duration = 2; let endTime = new Date(); endTime.setMinutes(endTime.getMinutes() + duration); let min = duration; let sec = 0; let interval = setInterval(() => { sec--; if (sec === -1) { sec = 59; min--; } let newValue = ( <> <span className="minutes">{formatNumber(min)}</span> <span className="divider">:</span> <span className="seconds">{formatNumber(sec)}</span> </> ); if (min === 0 && sec === 0) { clearInterval(interval); } setTime(newValue); }, 1000); return () => clearInterval(interval); }, []); let formatNumber = (num) => { return num.toLocaleString('en-US', { minimumIntegerDigits: 2, useGrouping: false, }); }; return <p className="Timer">{time}</p>; }
jsfiddle.net/baf3dcvt
Edit fiddle - JSFiddle - Code Playground
jsfiddle.net
https://stackblitz.com/edit/react-cagrm7?file=src%2FTimer.js
Count down timer - StackBlitz
stackblitz.com
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.