JSFiddle - React, Tailwind, and code Playground
by Diana Lemen
HTML
<script src="https://github.com/spite/SolariDisplay/blob/master/build/SolariBoard.min.js"></script>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Basic example | CSS3D Split-Flap Display Demo | Clicktorelease</title>
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
</head>
<body>
<div id="viewport" class="displayBase">
<div id="container" ></div>
</div>
<script>
'use strict'
var display;
window.requestAnimationFrame;
window.addEventListener( 'load', function() {
display = SolariBoard( {
container: container,
format: [
SOLARIVALUES.numbers,
SOLARIVALUES.numbers,
],
segmentWidth: 70,
segmentHeight: 120,
fontSize: 100
});
display.setContent( '00' );
}, false );
</script>
<button class="click-btn" onclick='display.clicklogic()'>
update
</button>
</body>
</html>
CSS
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
overflow: hidden;
}
a {
color: #ffffff;
}
#viewport {
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
}
#container {
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
font-family: 'Oswald', sans-serif;
}
.displayBase {
perspective: 400px;
perspective-origin: 50% 50%;
}
.displayBase * {
transform-style: preserve-3d;
}
.segments {
list-style-type: none;
float: left;
padding: 0;
padding: 10px;
transform-style: preserve-3d;
}
.segments * {
transform-style: preserve-3d;
}
.segment {
color: #fff;
text-align: center;
width: 60px;
height: 80px;
position: relative;
float: left;
}
.segment div {
text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.8), -1px -1px 0 rgba(0, 0, 0, 0.8), -1px -1px 0 rgba(0, 0, 0, 0.2);
left: 0;
top: 0;
right: 0;
bottom: 0;
width: 100%;
height: 50%;
box-shadow: inset 0 0 50px rgba(90, 90, 90, 0.2);
}
.segment .front, .segment .flip-front, .segment .flip-back, .segment .back {
position: absolute;
overflow: hidden;
background-color: #222;
text-transform: uppercase;
}
.segment .front {
left: 0;
top: 0;
}
.segment .back {
left: 0;
top: 50%;
line-height: 0px;
overflow: hidden;
}
.segment .flip-back {
left: 0;
top: 0;
background-color: black;
transform: rotateX(-45deg);
transform-origin: 0 50%;
}
.segment .flip-front {
left: 0;
top: 0;
line-height: 0px;
overflow: hidden;
transform: rotateX(135deg) translateY(50%) translateZ(0.1px);
transform-origin: 50% 50%;
}
.click-btn {
position: absolute;
}
JavaScript
SolariSegment = ( settings ) => {
var
_settings = settings,
_speedFactor = Math.random() * .01,
_speed = .25 + _speedFactor,
_angle = 0,
_currentValue = 0,
_nextValue = 0,
_values = _settings.values,
_startTime = Date.now(),
_li,
_front,
_flipFront,
_flipBack,
_back;
function _init() {
_li = document.createElement( 'li' );
_li.className = 'segment';
_li.style.width = _settings.width + 'px';
_li.style.height = _settings.height + 'px';
_front = document.createElement( 'div' );
_front.className = 'front';
_front.style.lineHeight = _settings.height + 'px';
_flipFront = document.createElement( 'div' );
_flipFront.className = 'flip-front';
_flipFront.style.webkitTransformOrigin = _flipFront.style.MozTransformOrigin = '0 ' + 0.5 * _settings.height + 'px';
_flipBack = document.createElement( 'div' );
_flipBack.className = 'flip-back';
_flipBack.style.lineHeight = _settings.height + 'px';
_flipBack.style.webkitTransformOrigin = _flipBack.style.MozTransformOrigin = '0 ' + 0.5 * _settings.height + 'px';
_back = document.createElement( 'div' );
_back.className = 'back';
_li.appendChild( _front );
_li.appendChild( _flipFront );
_li.appendChild( _flipBack );
_li.appendChild( _back );
}
function _update() {
var update = false;
if( _currentValue != _nextValue ) {
var time = Date.now();
_angle += ( _speed * ( time - _startTime ) );
_startTime = time;
if( _angle >= 180 ) {
_back.textContent = _values[ _currentValue ];
_flipBack.textContent = _values[ _currentValue ];
_currentValue++;
_currentValue %= _values.length;
_front.textContent = _values[ _currentValue ];
_flipFront.textContent = _values[ _currentValue ];
_angle %= 180;
}
update = true;
} else {
var time = Date.now();
_angle += ( _speed * ( time - _startTime ) );
_startTime = time;
if( _angle...