Date.now()
: 1970년 1월 1일 0시 0분 0초부터 현재까지 경과된 밀리 초를 반환
: setInterval 함수와 함께 사용하면 일정 시점부터 경과시간 측정 가능
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Date/now
clearInterval(a)
: a라는 setInterval 함수 실행을 중지
document.title
: head tag 내의 title 설정
내 코드
const timerButtons = document.querySelectorAll('.timer__button');
const specTime = document.querySelector('form');
const timeLeft = document.querySelector('.display__time-left');
const endTimeText = document.querySelector('.display__end-time');
// setInterval 실행 중 다른 버튼 눌렀을때 초기화해야하므로 global 변수 필요
let countdown;
function timeSet() {
clearInterval(countdown);
// const timeForSet = ;
countdownF(this.dataset.time);
}
function countdownF(timeForSet) {
const start = Date.now();
countdown = setInterval(() => {
const timeElapsed = Math.floor((Date.now() - start) / 1000);
const timeLeftNum = timeForSet - timeElapsed;
if (timeLeftNum >= 0) {
if (timeLeftNum > 60) {
const minLeft = Math.floor(timeLeftNum / 60);
const secLeft = timeLeftNum % 60;
timeLeft.textContent = `${minLeft}:${secLeft}`;
} else {
timeLeft.textContent = timeLeftNum;
}
//Date.now()는 70년 1월 1일 0초부터의 milliseconds 총 합산이므로, new Date()의 인자로 넣어서 미래 시간의 날짜로 새로운 변수 만들어야 함
const end = new Date(start + timeForSet * 1000);
const hour = end.getHours();
const min = end.getMinutes();
endTimeText.textContent = `Be Back At ${hour}시 ${min}분`;
} else clearInterval(countdown);
}, 1000);
}
function spectimeSet(e) {
e.preventDefault();
console.log(this);
const mins = this.minutes.value;
const secs = mins * 60;
this.reset();
countdownF(secs);
}
timerButtons.forEach((timerButton) =>
timerButton.addEventListener('click', timeSet)
);
//qeurySelector로 따로 지정하지 않아도 document.name 속성명으로도 접근 가능
specTime.addEventListener('submit', spectimeSet);
정답코드
const timerButtons = document.querySelectorAll('.timer__button');
const specTime = document.querySelector('form');
const timeLeft = document.querySelector('.display__time-left');
const endTimeText = document.querySelector('.display__end-time');
// setInterval 실행 중 다른 버튼 눌렀을때 초기화해야하므로 global 변수 필요
let countdown;
function timeSet() {
clearInterval(countdown);
// const timeForSet = ;
countdownF(this.dataset.time);
}
function countdownF(timeForSet) {
const start = Date.now();
countdown = setInterval(() => {
const timeElapsed = Math.floor((Date.now() - start) / 1000);
const timeLeftNum = timeForSet - timeElapsed;
if (timeLeftNum >= 0) {
if (timeLeftNum > 60) {
const minLeft = Math.floor(timeLeftNum / 60);
const secLeft = timeLeftNum % 60;
timeLeft.textContent = `${minLeft}:${secLeft}`;
} else {
timeLeft.textContent = timeLeftNum;
}
//Date.now()는 70년 1월 1일 0초부터의 milliseconds 총 합산이므로, new Date()의 인자로 넣어서 미래 시간의 날짜로 새로운 변수 만들어야 함
const end = new Date(start + timeForSet * 1000);
const hour = end.getHours();
const min = end.getMinutes();
endTimeText.textContent = `Be Back At ${hour}시 ${min}분`;
} else clearInterval(countdown);
}, 1000);
}
function spectimeSet(e) {
e.preventDefault();
console.log(this);
const mins = this.minutes.value;
const secs = mins * 60;
this.reset();
countdownF(secs);
}
timerButtons.forEach((timerButton) =>
timerButton.addEventListener('click', timeSet)
);
//qeurySelector로 따로 지정하지 않아도 document.name 속성명으로 접근 할 수도 있음
specTime.addEventListener('submit', spectimeSet);