Skip to content

Instantly share code, notes, and snippets.

@Spaksu
Created November 25, 2019 12:06
Show Gist options
  • Save Spaksu/fc560d69b6c59c3da62eba361d8b4297 to your computer and use it in GitHub Desktop.
Save Spaksu/fc560d69b6c59c3da62eba361d8b4297 to your computer and use it in GitHub Desktop.
Wall clock
<div class="clock">
<div class="hours">
<div class="first">
<div class="number">0</div>
</div>
<div class="second">
<div class="number">0</div>
</div>
</div>
<div class="tick">:</div>
<div class="minutes">
<div class="first">
<div class="number">0</div>
</div>
<div class="second">
<div class="number">0</div>
</div>
</div>
<div class="tick">:</div>
<div class="seconds">
<div class="first">
<div class="number">0</div>
</div>
<div class="second infinite">
<div class="number">0</div>
</div>
</div>
</div>
var hoursContainer = document.querySelector('.hours')
var minutesContainer = document.querySelector('.minutes')
var secondsContainer = document.querySelector('.seconds')
var tickElements = Array.from(document.querySelectorAll('.tick'))
var last = new Date(0)
last.setUTCHours(-1)
var tickState = true
function updateTime () {
var now = new Date
var lastHours = last.getHours().toString()
var nowHours = now.getHours().toString()
if (lastHours !== nowHours) {
updateContainer(hoursContainer, nowHours)
}
var lastMinutes = last.getMinutes().toString()
var nowMinutes = now.getMinutes().toString()
if (lastMinutes !== nowMinutes) {
updateContainer(minutesContainer, nowMinutes)
}
var lastSeconds = last.getSeconds().toString()
var nowSeconds = now.getSeconds().toString()
if (lastSeconds !== nowSeconds) {
//tick()
updateContainer(secondsContainer, nowSeconds)
}
last = now
}
function tick () {
tickElements.forEach(t => t.classList.toggle('tick-hidden'))
}
function updateContainer (container, newTime) {
var time = newTime.split('')
if (time.length === 1) {
time.unshift('0')
}
var first = container.firstElementChild
if (first.lastElementChild.textContent !== time[0]) {
updateNumber(first, time[0])
}
var last = container.lastElementChild
if (last.lastElementChild.textContent !== time[1]) {
updateNumber(last, time[1])
}
}
function updateNumber (element, number) {
//element.lastElementChild.textContent = number
var second = element.lastElementChild.cloneNode(true)
second.textContent = number
element.appendChild(second)
element.classList.add('move')
setTimeout(function () {
element.classList.remove('move')
}, 990)
setTimeout(function () {
element.removeChild(element.firstElementChild)
}, 990)
}
setInterval(updateTime, 100)
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html, body {
height: 100%;
width: 100%;
}
body {
background: black;
display: flex;
justify-content: center;
align-items: center;
}
.clock {
height: 20vh;
color: white;
font-size: 22vh;
font-family: sans-serif;
line-height: 20.4vh;
display: flex;
position: relative;
/*background: green;*/
overflow: hidden;
}
.clock::before, .clock::after {
content: '';
width: 7ch;
height: 3vh;
background: linear-gradient(to top, transparent, black);
position: absolute;
z-index: 2;
}
.clock::after {
bottom: 0;
background: linear-gradient(to bottom, transparent, black);
}
.clock > div {
display: flex;
}
.tick {
line-height: 17vh;
}
.tick-hidden {
opacity: 0;
}
.move {
animation: move linear 1s infinite;
}
@keyframes move {
from {
transform: translateY(0vh);
}
to {
transform: translateY(-20vh);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment