56 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			56 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | let countdown; | ||
|  | const timerDisplay = document.querySelector('.display__time-left'); | ||
|  | const endTime = document.querySelector('.display__end-time'); | ||
|  | const buttons = document.querySelectorAll('[data-time]'); | ||
|  | 
 | ||
|  | function timer(seconds) { | ||
|  |   // clear any existing timers
 | ||
|  |   clearInterval(countdown); | ||
|  | 
 | ||
|  |   const now = Date.now(); | ||
|  |   const then = now + seconds * 1000; | ||
|  |   displayTimeLeft(seconds); | ||
|  |   displayEndTime(then); | ||
|  | 
 | ||
|  |   countdown = setInterval(() => { | ||
|  |     const secondsLeft = Math.round((then - Date.now()) / 1000); | ||
|  |     // check if we should stop it!
 | ||
|  |     if(secondsLeft < 0) { | ||
|  |       clearInterval(countdown); | ||
|  |       return; | ||
|  |     } | ||
|  |     // display it
 | ||
|  |     displayTimeLeft(secondsLeft); | ||
|  |   }, 1000); | ||
|  | } | ||
|  | 
 | ||
|  | function displayTimeLeft(seconds) { | ||
|  |   const minutes = Math.floor(seconds / 60); | ||
|  |   const remainderSeconds = seconds % 60; | ||
|  |   const display = `${minutes}:${remainderSeconds < 10 ? '0' : '' }${remainderSeconds}`; | ||
|  |   document.title = display; | ||
|  |   timerDisplay.textContent = display; | ||
|  | } | ||
|  | 
 | ||
|  | function displayEndTime(timestamp) { | ||
|  |   const end = new Date(timestamp); | ||
|  |   const hour = end.getHours(); | ||
|  |   const adjustedHour = hour > 12 ? hour - 12 : hour; | ||
|  |   const minutes = end.getMinutes(); | ||
|  |   endTime.textContent = `Be Back At ${adjustedHour}:${minutes < 10 ? '0' : ''}${minutes}`; | ||
|  | } | ||
|  | 
 | ||
|  | function startTimer() { | ||
|  |   const seconds = parseInt(this.dataset.time); | ||
|  |   timer(seconds); | ||
|  | } | ||
|  | 
 | ||
|  | buttons.forEach(button => button.addEventListener('click', startTimer)); | ||
|  | document.customForm.addEventListener('submit', function(e) { | ||
|  |   e.preventDefault(); | ||
|  |   const mins = this.minutes.value; | ||
|  |   console.log(mins); | ||
|  |   timer(mins * 60); | ||
|  |   this.reset(); | ||
|  | }); |