SOURCE

console 命令行工具 X clear

                    
>
console
function Card(el) {
  this.$card = el;
  this.$flip = el.querySelector(".flip");
  this.$front = el.querySelector(".front");
  this.$back = el.querySelector(".back");
}

Card.prototype.flipToFront = function() {
  var that = this;

  this.$back.style.display = "block";
  this.$front.style.display = "none";

  this.$flip.classList.remove("flipToBack");
  this.$flip.classList.add("flipToFront");

  setTimeout(function() {
    that.$back.style.display = "none";
    that.$front.style.display = "block";
  },
  250);
};
Card.prototype.flipToBack = function() {
  var that = this;

  this.$front.style.display = "block";
  this.$back.style.display = "none";

  this.$flip.classList.remove("flipToFront");
  this.$flip.classList.add("flipToBack");

  setTimeout(function() {
    that.$front.style.display = "none";
    that.$back.style.display = "block";
  },
  250);
};

var ttt = new Card(document.querySelector(".card"));

$("button.flipToBack").on("click", function() {
  ttt.flipToBack();
});
$("button.flipToFront").on("click", function() {
  ttt.flipToFront();
})
<div class="card">
  <div class="flip">
    <div class="back">
      正正正正正正正正正正正正正正正
    </div>
    <div class="front">
      正正正正正正正正正正正正
    </div>
  </div>
</div>
<button class="flipToBack">
  flipToBack
</button>
<button class="flipToFront">
  flipToFront
</button>
.flip {
  width: 266px;
  height: 495px;
  transform-style: preserve-3d;
  &.flipToFront {
    animation-name: flipToFront;
    animation-duration: 500ms;
    animation-timing-function: ease-in-out;
    animation-delay: 0;
    animation-iteration-count: 1;
    animation-direction: normal;
    animation-fill-mode: none;
    animation-play-state: running;
  }
  &.flipToBack {
    transform: perspective(1280px) rotateY(-180deg);
    animation-name: flipToBack;
    animation-duration: 500ms;
    animation-timing-function: ease-in-out;
    animation-delay: 0;
    animation-iteration-count: 1;
    animation-direction: normal;
    animation-fill-mode: none;
    animation-play-state: running;
  }
}

.back {
  display: none;
  position: absolute;
  top: 0;
  left: 0;
  transform: rotateY(180deg);
  width: 100%;
  height: 100%;
  background-color: red;
  line-height: 495px;
  text-align: center;
}

.front {
  position: absolute;
  top: 0;
  left: 0;
  height: 495px;
  transform: rotateY(0deg);
  width: 100%;
  height: 100%;
  background-color: green;
  line-height: 495px;
  text-align: center;
}

@keyframes flipToBack {
  from {
    transform: perspective(1280px) rotateY(0)
  }
  to {
    transform: perspective(1280px) rotateY(-180deg)
  }
}

@keyframes flipToFront {
  from {
    transform: perspective(1280px) rotateY(-180deg)
  }
  to {
    transform: perspective(1280px) rotateY(0)
  }
}