Event countdown
The countdown uses an event date to calculate how much time is left until a event, in this example you will learn how to create a countdown using Lemonadejs!
A working example
See this example on jsfiddle.net
Source code
<html>
<link rel="stylesheet" href="https://jsuites.net/jsuites.css" type="text/css" />
<link rel="stylesheet" href="https://jsuites.net/jsuites.layout.css" type="text/css" />
<script type="text/javascript" src="https://jsuites.net/jsuites.js"></script>
<script src="https://lemonadejs.com/v1/lemonade.js"></script>
<div id='root'></div>
<script>
var Countdown = (function(container) {
var self = {};
self.days = '00';
self.hours = '00';
self.minutes = '00';
self.seconds = '00';
self.calendar = null;
self.eventTimeElement = null;
self.selectedDate = null;
self.createCalendar = function(o) {
self.calendar = jSuites.calendar(o);
}
self.startCountdown = function() {
var userInput = self.validateInput();
if(userInput) {
self.selectedDate = self.calendar.getValue().slice(0,10) + " " + userInput;
var timeLeft = self.getTimeLeft(self.selectedDate);
if (timeLeft) {
self.start();
} else {
alert('Invalid date, please select a later date')
}
} else {
alert('Invalid input');
}
}
self.validateInput = function() {
var [h, m, s] = self.eventTimeElement.value.split(':');
if (! isNaN(h) && ! isNaN(m) && ! isNaN(s) && (h >= 0 && h <= 24) && (m >= 0 && m <= 60) && (s >= 0 && s <= 60)) {
return self.eventTimeElement.value;
}
return false;
}
self.getTimeLeft = function(eventDate) {
var timeLeft = new Date(eventDate) - Date.now();
return timeLeft > 0 ? timeLeft : false;
}
self.getFormattedTimeLeft = function(timeLeft) {
var days = timeLeft / (1000 * 3600 * 24);
var hours = (days - parseInt(days)) * 24;
var minutes = (hours - parseInt(hours)) * 60;
var seconds = (minutes - parseInt(minutes)) * 60;
return [days, hours, minutes, seconds].map(n => parseInt(n));
}
self.start = function() {
var timeLeft = self.getTimeLeft(self.selectedDate);
var [d, h, m, s] = self.getFormattedTimeLeft(timeLeft);
self.days = jSuites.two(d);
self.hours = jSuites.two(h);
self.minutes = jSuites.two(m);
self.seconds = jSuites.two(s);
if (d || h || m || s) {
return setTimeout(self.start, 1000);
} else {
alert("Event countdown finished!");
}
}
var template = `
<div class="row" style="justify-content: space-evenly">
<div class="column" @ready="self.createCalendar(this)"></div>
<div class="column" style="color: #051e3e; font-weight: 600; background: #e6e6ea; border-radius: 8px; box-shadow: 0px 1px 5px 1px rgba(0,0,0,0.65);">
<div class="form-group p10">
<label>Event start time</label>
<input @ref="self.eventTimeElement" type="text" placeholder="Example: 20:00:00"/>
</div>
<div class="row center p10">
<div class="column f1">
<span style="font-size: 1.8em;">{{self.days}}</span>
<span style="display: block;">Days</span>
</div>
<div class="column f1">
<span style="font-size: 1.8em;">{{self.hours}}</span>
<span style="display: block;">Hours</span>
</div>
<div class="column f1">
<span style="font-size: 1.8em;">{{self.minutes}}</span>
<span style="display: block;">Minutes</span>
</div>
<div class="column f1">
<span style="font-size: 1.8em;">{{self.seconds}}</span>
<span style="display: block;">Seconds</span>
</div>
</div>
<div class="row p15" style="justify-content: center;">
<button class="jbutton dark" onclick="self.startCountdown()">Start countdown</button>
</div>
</div>
</div>
`
return lemonade.element(template, self);
});
lemonade.render(Countdown, document.getElementById('root'));
</script>