| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439 |
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="utf-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
-
- <!-- Google font -->
- <link href="https://fonts.googleapis.com/css?family=Maven+Pro:400,900" rel="stylesheet">
- <style type="text/css">
- body,
- html {
- padding: 0;
- margin: 0;
- font-family: 'Quicksand', sans-serif;
- font-weight: 400;
- overflow: hidden;
- }
-
- .writing {
- width: 320px;
- height: 200px;
- background-color: #3f3f3f;
- border: 1px solid #bbbbbb;
- border-radius: 6px 6px 4px 4px;
- position: relative;
- }
-
- .writing .topbar{
- position: absolute;
- width: 100%;
- height: 12px;
- background-color: #f1f1f1;
- border-top-left-radius: 4px;
- border-top-right-radius: 4px;
- }
-
- .writing .topbar div{
- height: 6px;
- width: 6px;
- border-radius: 50%;
- margin: 3px;
- float: left;
- }
-
- .writing .topbar div.green{
- background-color: #60d060;
- }
- .writing .topbar div.red{
- background-color: red;
- }
- .writing .topbar div.yellow{
- background-color: #e6c015;
- }
-
- .writing .code {
- padding: 15px;
- }
-
- .writing .code ul {
- list-style: none;
- margin: 0;
- padding: 0;
- }
-
- .writing .code ul li {
- background-color: #9e9e9e;
- width: 0;
- height: 7px;
- border-radius: 6px;
- margin: 10px 0;
- }
-
- .container {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
- -webkit-box-pack: center;
- -ms-flex-pack: center;
- justify-content: center;
- height: 100vh;
- width: 100%;
- -webkit-transition: -webkit-transform .5s;
- transition: -webkit-transform .5s;
- transition: transform .5s;
- transition: transform .5s, -webkit-transform .5s;
- }
-
- .stack-container {
- position: relative;
- width: 420px;
- height: 210px;
- -webkit-transition: width 1s, height 1s;
- transition: width 1s, height 1s;
- }
-
- .pokeup {
- -webkit-transition: all .3s ease;
- transition: all .3s ease;
- }
-
- .pokeup:hover {
- -webkit-transform: translateY(-10px);
- transform: translateY(-10px);
- -webkit-transition: .3s ease;
- transition: .3s ease;
- }
-
-
- .error {
- width: 400px;
- padding: 40px;
- text-align: center;
- }
-
- .error h1 {
- font-size: 125px;
- padding: 0;
- margin: 0;
- font-weight: 700;
- }
-
- .error h2 {
- margin: -30px 0 0 0;
- padding: 0px;
- font-size: 47px;
- letter-spacing: 12px;
- }
-
- .perspec {
- -webkit-perspective: 1000px;
- perspective: 1000px;
- }
-
- .writeLine{
- -webkit-animation: writeLine .4s linear forwards;
- animation: writeLine .4s linear forwards;
- }
-
- .explode{
- -webkit-animation: explode .5s ease-in-out forwards;
- animation: explode .5s ease-in-out forwards;
- }
-
- .card {
- -webkit-animation: tiltcard .5s ease-in-out 1s forwards;
- animation: tiltcard .5s ease-in-out 1s forwards;
- position: absolute;
- }
-
- @-webkit-keyframes tiltcard {
- 0% {
- -webkit-transform: rotateY(0deg);
- transform: rotateY(0deg);
- }
-
- 100% {
- -webkit-transform: rotateY(-30deg);
- transform: rotateY(-30deg);
- }
- }
-
- @keyframes tiltcard {
- 0% {
- -webkit-transform: rotateY(0deg);
- transform: rotateY(0deg);
- }
-
- 100% {
- -webkit-transform: rotateY(-30deg);
- transform: rotateY(-30deg);
- }
- }
-
- @-webkit-keyframes explode {
- 0% {
- -webkit-transform: translate(0, 0) scale(1);
- transform: translate(0, 0) scale(1);
- }
-
- 100% {
- -webkit-transform: translate(var(--spreaddist), var(--vertdist)) scale(var(--scaledist));
- transform: translate(var(--spreaddist), var(--vertdist)) scale(var(--scaledist));
- }
- }
-
- @keyframes explode {
- 0% {
- -webkit-transform: translate(0, 0) scale(1);
- transform: translate(0, 0) scale(1);
- }
-
- 100% {
- -webkit-transform: translate(var(--spreaddist), var(--vertdist)) scale(var(--scaledist));
- transform: translate(var(--spreaddist), var(--vertdist)) scale(var(--scaledist));
- }
- }
-
- @-webkit-keyframes writeLine {
- 0% {
- width:0;
- }
-
- 100% {
- width: var(--linelength);
- }
- }
-
- @keyframes writeLine {
- 0% {
- width:0;
- }
-
- 100% {
- width: var(--linelength);
- }
- }
-
- @media screen and (max-width: 1000px) {
- .container {
- -webkit-transform: scale(.85);
- transform: scale(.85);
- }
- }
-
- @media screen and (max-width: 850px) {
- .container {
- -webkit-transform: scale(.75);
- transform: scale(.75);
- }
- }
-
- @media screen and (max-width: 775px) {
- .container {
- -ms-flex-wrap: wrap-reverse;
- flex-wrap: wrap-reverse;
- -webkit-box-align: inherit;
- -ms-flex-align: inherit;
- align-items: inherit;
- }
- }
-
- @media screen and (max-width: 370px) {
- .container {
- -webkit-transform: scale(.6);
- transform: scale(.6);
- }
- }
- </style>
- </head>
-
- <body>
- <div class="container">
- <div class="error">
- <h1>500</h1>
- <h2>error</h2>
- <p>Please contact the developers (internal server error)</p>
- </div>
- <div class="stack-container">
- <div class="card-container">
- <div class="perspec" style="--spreaddist: 125px; --scaledist: .75; --vertdist: -25px;">
- <div class="card">
- <div class="writing">
- <div class="topbar">
- <div class="red"></div>
- <div class="yellow"></div>
- <div class="green"></div>
- </div>
- <div class="code">
- <ul>
- </ul>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="card-container">
- <div class="perspec" style="--spreaddist: 100px; --scaledist: .8; --vertdist: -20px;">
- <div class="card">
- <div class="writing">
- <div class="topbar">
- <div class="red"></div>
- <div class="yellow"></div>
- <div class="green"></div>
- </div>
- <div class="code">
- <ul>
- </ul>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="card-container">
- <div class="perspec" style="--spreaddist:75px; --scaledist: .85; --vertdist: -15px;">
- <div class="card">
- <div class="writing">
- <div class="topbar">
- <div class="red"></div>
- <div class="yellow"></div>
- <div class="green"></div>
- </div>
- <div class="code">
- <ul>
- </ul>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="card-container">
- <div class="perspec" style="--spreaddist: 50px; --scaledist: .9; --vertdist: -10px;">
- <div class="card">
- <div class="writing">
- <div class="topbar">
- <div class="red"></div>
- <div class="yellow"></div>
- <div class="green"></div>
- </div>
- <div class="code">
- <ul>
- </ul>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="card-container">
- <div class="perspec" style="--spreaddist: 25px; --scaledist: .95; --vertdist: -5px;">
- <div class="card">
- <div class="writing">
- <div class="topbar">
- <div class="red"></div>
- <div class="yellow"></div>
- <div class="green"></div>
- </div>
- <div class="code">
- <ul>
- </ul>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="card-container">
- <div class="perspec" style="--spreaddist: 0px; --scaledist: 1; --vertdist: 0px;">
- <div class="card">
- <div class="writing">
- <div class="topbar">
- <div class="red"></div>
- <div class="yellow"></div>
- <div class="green"></div>
- </div>
- <div class="code">
- <ul>
- </ul>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
-
- </div>
- </body>
- <script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
- <script type="text/javascript">
- const stackContainer = document.querySelector('.stack-container');
- const cardNodes = document.querySelectorAll('.card-container');
- const perspecNodes = document.querySelectorAll('.perspec');
- const perspec = document.querySelector('.perspec');
- const card = document.querySelector('.card');
-
- let counter = stackContainer.children.length;
-
- //function to generate random number
- function randomIntFromInterval(min, max) {
- return Math.floor(Math.random() * (max - min + 1) + min);
- }
-
- //after tilt animation, fire the explode animation
- card.addEventListener('animationend', function () {
- perspecNodes.forEach(function (elem, index) {
- elem.classList.add('explode');
- });
- });
-
- //after explode animation do a bunch of stuff
- perspec.addEventListener('animationend', function (e) {
- if (e.animationName === 'explode') {
- cardNodes.forEach(function (elem, index) {
-
- //add hover animation class
- elem.classList.add('pokeup');
-
- //add event listner to throw card on click
- elem.addEventListener('click', function () {
- let updown = [800, -800]
- let randomY = updown[Math.floor(Math.random() * updown.length)];
- let randomX = Math.floor(Math.random() * 1000) - 1000;
- elem.style.transform = `translate(${randomX}px, ${randomY}px) rotate(-540deg)`
- elem.style.transition = "transform 1s ease, opacity 2s";
- elem.style.opacity = "0";
- counter--;
- if (counter === 0) {
- stackContainer.style.width = "0";
- stackContainer.style.height = "0";
- }
- });
-
- //generate random number of lines of code between 4 and 10 and add to each card
- let numLines = randomIntFromInterval(5, 10);
-
- //loop through the lines and add them to the DOM
- for (let index = 0; index < numLines; index++) {
- let lineLength = randomIntFromInterval(25, 97);
- var node = document.createElement("li");
- node.classList.add('node-' + index);
- elem.querySelector('.code ul').appendChild(node).setAttribute('style', '--linelength: ' + lineLength + '%;');
-
- //draw lines of code 1 by 1
- if (index == 0) {
- elem.querySelector('.code ul .node-' + index).classList.add('writeLine');
- } else {
- elem.querySelector('.code ul .node-' + (index - 1)).addEventListener('animationend', function (e) {
- elem.querySelector('.code ul .node-' + index).classList.add('writeLine');
- });
- }
- }
- });
- }
- });
- </script>
- </html>
|