SOURCE

console 命令行工具 X clear

                    
>
console
const block = document.querySelector('.block');
const coin = document.querySelector('.coin');
const oneup = document.querySelector('.oneup');
const audio = document.querySelector('audio#coin');
const scoreBoard = document.querySelector('.score');
let score = 0;

function playSound() {
  if (!audio) return;
  audio.currentTime = 0;
  audio.play();
  coin.classList.add('active');
  block.classList.add('bounce');
}

function removeBounce(e) {
  if(e.animationName !== 'blockbounce') return;
  this.classList.remove('bounce');
}

function removeActive(e) {
  if(e.animationName !== 'coinmove') return;
  this.classList.remove('active');
}

function removeOneUpActive(e) {
  if(e.animationName !== 'oneupmove') return;
  this.classList.remove('oneup-active');
}

function hit(e) {
  if(!e.isTrusted) return;
  score++;
  scoreBoard.textContent = score;
}

function playSoundOneUp() {
  if(score == 100) {
    const audioOneUp = document.querySelector('audio#oneup');
    audio.pause();
    audioOneUp.currentTime = 0;
    audioOneUp.play();
    coin.classList.remove('active');
    block.classList.add('bounce');
    oneup.classList.add('oneup-active');
    score = 0;
    scoreBoard.textContent = 0;
  }
}

block.addEventListener('webkitAnimationEnd', removeBounce);
block.addEventListener('animationend', removeBounce);

coin.addEventListener('webkitAnimationEnd', removeActive);
coin.addEventListener('animationend', removeActive);
oneup.addEventListener('webkitAnimationEnd', removeOneUpActive);
oneup.addEventListener('animationend', removeOneUpActive);

block.addEventListener('click', hit);
block.addEventListener('click', playSound);
block.addEventListener('click', playSoundOneUp);
<h2>Score: <span class="score">0</span></h2>

<div class="container">
  <div class="block">
    <div class="front"><span>?</span></div>
    <div class="back"><span></span></div>
    <div class="right"><span>?</span></div>
    <div class="left"><span>?</span></div>
    <div class="top"><span></span></div>
    <div class="bottom"><span></span></div>
  </div>
  <div class="coin"></div>
  <div class="oneup">
    <div class="cap">
      <div class="spot"></div>
    </div>
    <div class="face">
      <div class="eye"></div>
      <div class="eye right"></div>
    </div>
  </div>
</div>

<audio id="coin" src="http://katherinekato.com/misc/coin.wav"></audio>
<audio id="oneup" src="http://katherinekato.com/misc/1-up.wav"></audio>
@import url('https://fonts.googleapis.com/css?family=Black+Ops+One');

* {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}

html, body {
  -webkit-user-select: none;
  -moz-user-select: none;
  user-select: none;
}

body {
  font-family: 'Black Ops One', cursive;
  font-size: 1.5rem;
  background: #e6fbf7;
  color: #acacac;
  text-align: center;
  margin: 0;
}

.container {
  position: absolute;
  margin: 0 auto;
  top: 50%;
  left: 50%;
  width: 200px;
  height: 190px;
  -webkit-perspective: 1000px;
  -moz-perspective: 1000px;
  perspective: 1000px;
  -webkit-transform: translate(-50%,-50%);
  -moz-transform: translate(-50%,-50%);
  transform: translate(-50%,-50%);
}

.block, .coin, .oneup {
  position: absolute;
  -webkit-transform-style: preserve-3d;
  -moz-transform-style: preserve-3d;
  transform-style: preserve-3d;
  -webkit-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px);
  -moz-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px);
  transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px);
  -webkit-transform-origin: center center -100px;
  -moz-transform-origin: center center -100px;
  transform-origin: center center -100px;
}

.block {
  width: 100%;
  height: 100%;
}

.block > div {
  position: absolute;
  width: 200px;
  height: 190px;
}

.block span {
  position: absolute;
  top: 65%;
  left: 55%;
  color: #fff;
  font-size: 12rem;
  text-align: center;
  -webkit-transform: translate(-50%, -50%);
  -moz-transform: scale(1.1,1.2) translate(-50%, -50%);
  transform: scale(1.1,1.2) translate(-50%, -50%);
  text-shadow: 2px 2px 1px rgba(250,156,72,0.35);
}

.block .front {
  -webkit-transform: rotateY(0deg) translateZ(100px);
  -moz-transform: rotateY(0deg) translateZ(100px);
  transform: rotateY(0deg) translateZ(100px);
  background: #ffd436;
  -webkit-border-radius: 20px 0 20px 20px;
  -moz-border-radius: 20px 0 20px 20px;
  border-radius: 20px 0 20px 20px;
}

.block .front:before,
.block .right:before,
.block .front:after,
.block .right:after,
.block .front span:before,
.block .right span:before,
.block .front span:after,
.block .right span:after {
  content: '';
  position: absolute;
  width: 15px;
  height: 15px;
  background: #fa9c48;
  -webkit-border-radius: 100%;
  -moz-border-radius: 100%;
  border-radius: 100%;
}

.block .front:before,
.block .right:before {
  top: 10px;
  left: 10px;
}

.block .front:after,
.block .right:after {
  top: 10px;
  right: 5px;
}

.block .front span:before,
.block .right span:before {
  left: -20px;
}

.block .front span:before,
.block .right span:before,
.block .front span:after,
.block .right span:after {
  top: 173px;
}

.block .bottom,
.block .back,
.block .left {
    background: #ffd436;
}

.block .top,
.block .bottom,
.block .back,
.block .left,
.block .right {
  -webkit-border-radius: 20px;
  -moz-border-radius: 20px;
  border-radius: 20px;
}

.block .back {
  -webkit-transform: rotateX(180deg) translateZ(100px);
  -moz-transform: rotateX(180deg) translateZ(100px);
  transform: rotateX(180deg) translateZ(100px);
}

.block .left {
  -webkit-transform: rotateY(-90deg) translateZ(100px);
  -moz-transform: rotateY(-90deg) translateZ(100px);
  transform: rotateY(-90deg) translateZ(100px);
}
.block .right {
  background: #feba41;
  -webkit-transform: rotateY(90deg) translateZ(100px);
  -moz-transform: rotateY(90deg) translateZ(100px);
  transform: rotateY(90deg) translateZ(100px);
}

.block .right:before,
.block .right:after,
.block .right span:before,
.block .right span:after {
  background: #e4984f;
}

.block .right span {
  color: #fcddaa;
}

.block .top {
  background: #ffe971;
  -webkit-transform: rotateX(90deg) translateZ(100px);
  -moz-transform: rotateX(90deg) translateZ(100px);
  transform: rotateX(90deg) translateZ(100px);
}

.block .bottom {
  -webkit-transform: rotateX(-90deg) translateZ(100px);
  -moz-transform: rotateX(-90deg) translateZ(100px);
  transform: rotateX(-90deg) translateZ(100px);
}

.block .bottom:after {
  content: '';
  position: absolute;
  left: 0;
  width: 100%;
  height: 100%;
  -webkit-border-radius: inherit;
  -moz-border-radius: inherit;
  border-radius: inherit;
  -webkit-box-shadow: 5px 0 50px 0 rgba(141,168,161,0.68);
  -moz-box-shadow: 5px 0 50px 0 rgba(141,168,161,0.68);
  box-shadow: 5px 0 50px 0 rgba(141,168,161,0.68);
}

.block .top {
  top: 8px;
}

.block .back {
  top: 5px;
}

.block .left,
.block .right {
  top: 4px;
}

.block.bounce {
  -webkit-animation: blockbounce 0.1s ease-in-out;
  -moz-animation: blockbounce 0.1s ease-in-out;
  animation: blockbounce 0.1s ease-in-out;
}

.coin {
  z-index: 1;
  top: -140px;
  left: 20px;
  width: 120px;
  height: 160px;
  background: #ffd436;
  -webkit-border-radius: 100%;
  -moz-border-radius: 100%;
  border-radius: 100%;
  -webkit-box-shadow: 5px 8px 20px 5px rgba(228,152,79,0.5);
  -moz-box-shadow: 5px 8px 20px 5px rgba(228,152,79,0.5);
  box-shadow: 5px 8px 20px 5px rgba(228,152,79,0.5);
  display: none;
}

.coin:before,
.coin:after {
  content: '';
  position: absolute;
  border-top: 8px solid #fa9c48;
  border-right: 2px solid  #fa9c48;
  border-left: 8px solid  #fa9c48;
  border-bottom: 2px solid #fa9c48;
}

.coin:before {
  top: 15px;
  left: 15px;
  width: 70px;
  height: 120px;
  -webkit-border-radius: 100%;
  -moz-border-radius: 100%;
  border-radius: 100%;
}

.coin:after {
  top: 45px;
  right: 55px;
  width: 10px;
  height: 80px;
}

.coin.active {
  display: block;
  -webkit-transform-style: preserve-3d;
  -moz-transform-style: preserve-3d;
  transform-style: preserve-3d;
  -webkit-animation: coinmove 0.3s ease-in-out forwards;
  -moz-animation: coinmove 0.3s ease-in-out forwards;
  animation: coinmove 0.3s ease-in-out forwards;
}

.oneup {
  z-index: 1;
  top: -150px;
  left: -10px;
  width: 184px;
  height: 174px;
  display: none;
}

.oneup:after {
  content: '';
  position: absolute;
  z-index: -1;
  top: 10px;
  left: 25px;
  width: 120px;
  height: 150px;
  -webkit-border-radius: 90% 90% 60% 60% / 100% 100% 80% 80%;
  -moz-border-radius: 90% 90% 60% 60% / 100% 100% 80% 80%;
  border-radius: 90% 90% 60% 60% / 100% 100% 80% 80%;
  -webkit-box-shadow: 2px 10px 20px 5px rgba(228,152,79,0.75);
  -moz-box-shadow: 2px 10px 20px 5px rgba(228,152,79,0.75);
  box-shadow: 2px 10px 20px 5px rgba(228,152,79,0.75);
}

.oneup .cap {
  position: absolute;
  width: 180px;
  height: 140px;
  background: #85b65f;
  -webkit-border-radius: 90% 90% 60% 60% / 100% 100% 80% 80%;
  -moz-border-radius: 90% 90% 60% 60% / 100% 100% 80% 80%;
  border-radius: 90% 90% 60% 60% / 100% 100% 80% 80%;
  overflow: hidden;
}

.oneup .spot,
.oneup .spot:before,
.oneup .spot:after {
  -webkit-border-radius: 100%;
  -moz-border-radius: 100%;
  border-radius: 100%;
  background: #fff;
}

.oneup .spot {
  position: absolute;
  top: 10px;
  left: 45px;
  width: 80px;
  height: 80px;
}

.oneup .spot:before {
  content: '';
  position: absolute;
  top: 20px;
  left: -100px;
  width: 80px;
  height: 80px;
}

.oneup .spot:after {
  content: '';
  position: absolute;
  top: 20px;
  left: 110px;
  width: 80px;
  height: 80px;
}

.oneup .face {
  position: absolute;
  top: 105px;
  left: 33px;
  width: 110px;
  height: 65px;
  background: #fdd0af;
  -webkit-border-radius: 100% 100% 100% 100% / 90% 90% 90% 90%;
  -moz-border-radius: 100% 100% 100% 100% / 90% 90% 90% 90%;
  border-radius: 100% 100% 100% 100% / 90% 90% 90% 90%;
}

.oneup .face .eye {
  position: absolute;
  top: 10px;
  left: 30px;
  width: 10px;
  height: 30px;
  background: #af9174;
  -webkit-border-radius: 100%;
  -moz-border-radius: 100%;
  border-radius: 100%;
}

.oneup .face .eye.right {
  left: 65px;
}

.oneup.oneup-active {
  display: block;
  -webkit-transform-style: preserve-3d;
  -moz-transform-style: preserve-3d;
  transform-style: preserve-3d;
  -webkit-animation: oneupmove 0.4s ease-in-out forwards;
  -moz-animation: oneupmove 0.4s ease-in-out forwards;
  animation: oneupmove 0.4s ease-in-out forwards;
}

@-webkit-keyframes blockbounce {
  0% {
    bottom: 5px;
  }

  25%,
  75% {
    bottom: 15px;
  }

  50% {
    bottom: 20px;
  }
  
  100% {
    bottom: 0;
  }
}

@-moz-keyframes blockbounce {
  0% {
    bottom: 5px;
  }

  25%,
  75% {
    bottom: 15px;
  }

  50% {
    bottom: 20px;
  }
  
  100% {
    bottom: 0;
  }
}

@keyframes blockbounce {
  0% {
    bottom: 5px;
  }

  25%,
  75% {
    bottom: 15px;
  }

  50% {
    bottom: 20px;
  }

  100% {
    bottom: 0;
  }
}

@-moz-keyframes coinmove {
  0% {
    -webkit-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,0);
    -moz-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,0);
    transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px), translate(0,0);
  }

  50% {
    -webkit-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,-80px);
    -moz-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,-80px);
    transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,-80px);
  }
  
  100% {
    -webkit-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,0);
    -moz-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,0);
    transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px), translate(0,0);
  }
}

@-webkit-keyframes coinmove {
  0% {
    -webkit-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,0);
    -moz-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,0);
    transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px), translate(0,0);
  }

  50% {
    -webkit-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,-80px);
    -moz-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,-80px);
    transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,-80px);
  }
  
  100% {
    -webkit-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,0);
    -moz-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,0);
    transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px), translate(0,0);
  }
}

@keyframes coinmove {
  0% {
    -webkit-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,0);
    -moz-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,0);
    transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px), translate(0,0);
  }

  50% {
    -webkit-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,-80px);
    -moz-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,-80px);
    transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,-80px);
  }
  
  100% {
    -webkit-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,0);
    -moz-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,0);
    transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px), translate(0,0);
  }
}

@-webkit-keyframes oneupmove {
  0% {
    -webkit-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,0);
    -moz-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,0);
    transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px), translate(0,0);
  }

  50% {
    -webkit-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,-80px);
    -moz-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,-80px);
    transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,-80px);
  }
  
  100% {
    -webkit-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,0);
    -moz-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,0);
    transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px), translate(0,0);
  }
}

@-moz-keyframes oneupmove {
  0% {
    -webkit-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,0);
    -moz-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,0);
    transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px), translate(0,0);
  }

  50% {
    -webkit-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,-80px);
    -moz-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,-80px);
    transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,-80px);
  }
  
  100% {
    -webkit-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,0);
    -moz-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,0);
    transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px), translate(0,0);
  }
}

@keyframes oneupmove {
  0% {
    -webkit-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,0);
    -moz-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,0);
    transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px), translate(0,0);
  }

  50% {
    -webkit-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,-80px);
    -moz-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,-80px);
    transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,-80px);
  }
  
  100% {
    -webkit-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,0);
    -moz-transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px) translate(0,0);
    transform: rotateX(-25deg) rotateY(-30deg) translateZ(-100px), translate(0,0);
  }
}