【GSAP】フリップ演出を実装 CSSのみでも再現できるけども…【コピペOK!デモあり】

今回はHTML・CSS・JavaScript(GSAP)を使用してフリップ演出を実装してみました!CSSだけでも再現できますがJavaScript(GSAP)で補助して実装しています。何かの気づきや学習に役立つかと思います!

コピペしてすぐに実装できるようにCodePenによるデモを用意しています。ぜひ最後までご覧いただけると嬉しいです。

1.実装イメージ

実装イメージは以下の通りです。

See the Pen flip by りょーすけ (@s_ryosuke_1242) on CodePen.

注意点としては予め、CDNでプラグインをダウンロードしておきましょう。

CDNはコチラ

必要なファイルは『gsap.min.js』です。

2.HTML

HTMLはコチラの通りになっています。比較的シンプルですね

<section class="animation-area">
  <div class="wrapper">
    <div class="card">
      <div class="card__face card__face--front">front</div>
      <div class="card__face card__face--back">back</div>
    </div>
  </div>
</section>
<section class="animation-area">
  <div class="wrapper">
    <div class="card">
      <div class="card__face card__face--front">front</div>
      <div class="card__face card__face--back-2">back</div>
    </div>
  </div>
</section>

3.CSS

次にCSSです。

*{
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}
html,body,main,section{
    width: 100%;
}
.animation-area{
    width: 100%;
    height: 100vh;
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
}
.wrapper {
	width: 200px;
	height: 260px;
	border: 1px solid #CCC;
	margin: 40px 0;
	perspective: 600px;
}

.card {
	width: 100%;
	height: 100%;
	transition: transform 1s;
	transform-style: preserve-3d;
	cursor: pointer;
	position: relative;
}

.card__face {
	position: absolute;
	width: 100%;
	height: 100%;
	line-height: 260px;
	color: white;
	text-align: center;
	font-weight: bold;
	font-size: 40px;
	-webkit-backface-visibility: hidden;
	backface-visibility: hidden;
  }

.card__face--front {
	background: crimson;
}
  
.card__face--back {
	background: cornflowerblue;
	transform: rotateY(180deg);
}

.card__face--back-2 {
	background: seagreen;
	transform: rotateX(180deg);
}

4.JavaScript

次にJavaScriptです

document.addEventListener('DOMContentLoaded', function() {

  var wrapper = document.getElementsByClassName('wrapper');
  wrapper[0].addEventListener('mouseover', ()=> {
    card = wrapper[0].querySelector('.card');
    gsap.to(card,{rotateY:180,duration:.1})
  });

  wrapper[0].addEventListener('mouseleave', ()=> {
    card = wrapper[0].querySelector('.card');
    gsap.to(card,{rotateY:0,duration:.1})
  });

  wrapper[1].addEventListener('mouseover', ()=> {
    card = wrapper[1].querySelector('.card');
    gsap.to(card,.1,{rotateX:180,duration:.1,ease:"bounce"})
  });

  wrapper[1].addEventListener('mouseleave', ()=> {
    ard = wrapper[1].querySelector('.card');
    gsap.to(card,.1,{rotateX:0,duration:.1,ease:"bounce"})
  });

})