A Pen by muhammedozalp on CodePen.
Created
July 17, 2020 22:16
-
-
Save muhammedozalp/3654fc089d102b32927883b1296209d9 to your computer and use it in GitHub Desktop.
Splitting: 3D Clock
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<div class="clock"> | |
<span class="cog hours tens" data-splitting>0123456789</span> | |
<span class="cog hours" data-splitting>0123456789</span> | |
<span class="colon">:</span> | |
<span class="cog minutes tens" data-splitting>0123456789</span> | |
<span class="cog minutes" data-splitting>0123456789</span> | |
<span class="colon">:</span> | |
<span class="cog seconds tens" data-splitting>0123456789</span> | |
<span class="cog seconds" data-splitting>0123456789</span> | |
</div> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
console.clear(); | |
Splitting(); | |
var clock = document.querySelector('.clock'); | |
/* We need zero-led values to help with the tens columns, and to allow for better looping around when reaching '9' */ | |
function leadingZeroString(n){ | |
return ('0' + n).slice(-2); | |
} | |
function updateTime(){ | |
var d = new Date(); | |
var h = leadingZeroString(d.getHours()); | |
var m = leadingZeroString(d.getMinutes()); | |
var s = leadingZeroString(d.getSeconds()); | |
clock.style.setProperty('--h1', h[0]); | |
clock.style.setProperty('--h2', h); | |
clock.style.setProperty('--m1', m[0]); | |
clock.style.setProperty('--m2', m); | |
clock.style.setProperty('--s1', s[0]); | |
clock.style.setProperty('--s2', s); | |
} | |
updateTime(); | |
setInterval(updateTime, 1000); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<script src="https://unpkg.com/splitting@next/dist/splitting.js"></script> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$bg: #222; | |
$color: #F1F1F1; | |
html, body { background: $bg; } | |
html { height: 100%; display: flex; } | |
body { | |
margin: auto; | |
width: 100%; | |
overflow: hidden; | |
} | |
@import url('https://fonts.googleapis.com/css?family=Oswald:700'); | |
.clock { | |
--time-offset: 0; | |
width: 100%; | |
height: 100%; | |
background: rgba($bg,0.8); | |
text-align: center; | |
display: flex; | |
justify-content: center; | |
align-items: center; | |
height: 6em; | |
color: $color; | |
font-family: monospace; | |
font-size: 8vmin; | |
font-family: 'Oswald', sans-serif; | |
letter-spacing: 0.1em; | |
perspective: 500px; | |
--h1: 1; | |
--h2: 2; | |
--m1: 3; | |
--m2: 4; | |
--s1: 5; | |
--s2: 6; | |
&, | |
&:before, | |
*,{ | |
box-sizing: border-box; | |
transform-style: preserve-3d; | |
} | |
&:before { | |
content: ''; | |
display: block; | |
position: absolute; | |
top: 0; | |
left: 0; | |
width: 100%; | |
height: 100%; | |
background: linear-gradient(to bottom, rgba($bg,.9) 20%, transparent calc(50% - .4ch), transparent calc(50% + .4ch), rgba($bg,.9) 80%); | |
transform: translateZ(2.6em); | |
} | |
} | |
.colon { | |
display: inline-block; | |
opacity: 0.8; | |
transform: translateZ(2.5em); | |
width: 1ch; | |
margin: 0; | |
text-align: center; | |
} | |
.cog { | |
position: relative; | |
width: 1ch; | |
height: 1ch; | |
margin: -.25ch .1ch 0; | |
display: inline-block; | |
// --unit: 2; | |
transition: transform .3s cubic-bezier(.4, 0, .6, 1); | |
transform: rotateX( | |
calc( | |
-1turn * | |
(var(--unit) / var(--char-total)) | |
) | |
) ; | |
.word, | |
.char { | |
position: absolute; | |
top: 0%; | |
left: 0%; | |
width: 1ch; | |
height: 1ch; | |
} | |
.char { | |
transform: | |
//translate(-50%, -50%) | |
rotateX( calc( 4deg + (360deg * var(--char-percent) )) ) | |
//rotateX( calc( 165deg + (162deg * var(--distance-sine)) ) ) | |
translateZ( 2.5em ); | |
// translateZ( calc( 0.25em * var(--char-total) ) ); | |
} | |
} | |
.tens { text-align: right; } | |
.hours.tens { --unit: var(--h1); } | |
.hours { --unit: var(--h2); } | |
.minutes.tens { --unit: var(--m1); } | |
.minutes { --unit: var(--m2); } | |
.seconds.tens { --unit: var(--s1); } | |
.seconds { --unit: var(--s2); } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<link href="https://lucid-northcutt-877344.netlify.com/dist/splitting.css" rel="stylesheet" /> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment