今回はHTML・CSS・JavaScript(GSAP)を使用してフリップ演出を実装してみました!CSSだけでも再現できますがJavaScript(GSAP)で補助して実装しています。何かの気づきや学習に役立つかと思います!
コピペしてすぐに実装できるようにCodePenによるデモを用意しています。ぜひ最後までご覧いただけると嬉しいです。
目次 非表示
1.実装イメージ
実装イメージは以下の通りです。
See the Pen flip by りょーすけ (@s_ryosuke_1242) on CodePen.
注意点としては予め、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"})
});
})