
Flipping Card TutorialはCSSとJavascriptでコンテンツを回転させる動きを実装できるチュートリアルです。
マウスホバーで回転、クリックで回転、ランダムで回転の3つのタイプがあります。
デモ
デモページを用意しました。
実装方法
共通CSSの準備
共通で使用するcssを準備します。
.card {
position: relative;
float:left;
padding-bottom: 25%;
width: 25%;
text-align: center;
}
.card__front,
.card__back {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.card__front,
.card__back {
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
-webkit-transition: -webkit-transform 0.3s;
transition: transform 0.3s;
}
.card__front {
background-color: #ff5078;
}
.card__back {
background-color: #1e1e1e;
-webkit-transform: rotateY(-180deg);
transform: rotateY(-180deg);
}
.card__text {
display: inline-block;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
margin: auto;
height: 20px;
color: #fff;
font-family: "Roboto Slab", serif;
line-height: 20px;
}
マウスホバーで回転
マウスホバーで回転するパターンです。cssだけで実装できます。
↓html
<div class="card effect__hover"> <div class="card__front"> <span class="card__text">front</span> </div> <div class="card__back"> <span class="card__text">back</span> </div> </div><!-- /card -->
↓css
.card.effect__hover:hover .card__front {
-webkit-transform: rotateY(-180deg);
transform: rotateY(-180deg);
}
.card.effect__hover:hover .card__back {
-webkit-transform: rotateY(0);
transform: rotateY(0);
}
クリックで回転
クリックで回転するパターンです。cssとjsで実装できます。
↓html
<div class="card effect__click"> <div class="card__front"> <span class="card__text">front</span> </div> <div class="card__back"> <span class="card__text">back</span> </div> </div><!-- /card -->
↓css
.card.effect__click.flipped .card__front {
-webkit-transform: rotateY(-180deg);
transform: rotateY(-180deg);
}
.card.effect__click.flipped .card__back {
-webkit-transform: rotateY(0);
transform: rotateY(0);
}
↓js
$(function() {
var cards = document.querySelectorAll(".card.effect__click");
for ( var i = 0, len = cards.length; i < len; i++ ) {
var card = cards[i];
clickListener( card );
}
function clickListener(card) {
card.addEventListener( "click", function() {
var c = this.classList;
c.contains("flipped") === true ? c.remove("flipped") : c.add("flipped");
});
}
});
ランダムで回転
ランダムで回転するパターンです。
↓html data-id=”1″の部分を連番にします。
<div class="card effect__random" data-id="1"> <div class="card__front"> <span class="card__text">front</span> </div> <div class="card__back"> <span class="card__text">back</span> </div> </div><!-- /card --> <div class="card effect__random" data-id="2"> <div class="card__front"> <span class="card__text">front</span> </div> <div class="card__back"> <span class="card__text">back</span> </div> </div><!-- /card -->
↓css
.card.effect__random.flipped .card__front {
-webkit-transform: rotateY(-180deg);
transform: rotateY(-180deg);
}
.card.effect__random.flipped .card__back {
-webkit-transform: rotateY(0);
transform: rotateY(0);
}
↓js
$(function() {
// cache vars
var cards = document.querySelectorAll(".card.effect__random");
var timeMin = 1;
var timeMax = 3;
var timeouts = [];
// loop through cards
for ( var i = 0, len = cards.length; i < len; i++ ) {
var card = cards[i];
var cardID = card.getAttribute("data-id");
var id = "timeoutID" + cardID;
var time = randomNum( timeMin, timeMax ) * 1000;
cardsTimeout( id, time, card );
}
// timeout listener
function cardsTimeout( id, time, card ) {
if (id in timeouts) {
clearTimeout(timeouts[id]);
}
timeouts[id] = setTimeout( function() {
var c = card.classList;
var newTime = randomNum( timeMin, timeMax ) * 1000;
c.contains("flipped") === true ? c.remove("flipped") : c.add("flipped");
cardsTimeout( id, newTime, card );
}, time );
}
// random number generator given min and max
function randomNum( min, max ) {
return Math.random() * (max - min) + min;
}
});