Skip to content

Instantly share code, notes, and snippets.

@mikeislearning
Last active August 29, 2015 13:59
Show Gist options
  • Save mikeislearning/10880025 to your computer and use it in GitHub Desktop.
Save mikeislearning/10880025 to your computer and use it in GitHub Desktop.
Unlimited image flip card animation
.flip-card {
-webkit-transform-style: preserve3d;
-moz-transform-style: preserve3d;
-ms-transform-style: preserve3d;
-o-transform-style: preserve3d;
transform-style: preserve3d;
-webkit-transition: null 1s null;
-moz-transition: null 1s null;
-ms-transition: null 1s null;
-o-transition: null 1s null;
transition: null 1s null;
}
.backface {
-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
-ms-backface-visibility: hidden;
-o-backface-visibility: hidden;
backface-visibility: hidden;
}
.back{
-webkit-transform: rotateY(180deg);
-moz-transform: rotateY(180deg);
-ms-transform: rotateY(180deg);
-o-transform: rotateY(180deg);
transform: rotateY(180deg);
}
.dont-show{
opacity: 0;
}
<div class="flip-card">
<img src="http://lorempixel.com/400/200/sports">
<img src="http://lorempixel.com/400/200/sports">
<img src="http://lorempixel.com/400/200/sports">
<img src="http://lorempixel.com/400/200/sports">
<img src="http://lorempixel.com/400/200/sports">
<img src="http://lorempixel.com/400/200/sports">
</div>
var numFlipImages = $('.flip-card img').length;
var currentNum = 0;
var flipArray = [];
var counter = 0;
var nextNum = 0;
var prevNum = 0;
$('.flip-card img').each(function(i){
flipArray.push($(this));
$(this).addClass('backface dont-show');
});
flipArray[currentNum].removeClass('dont-show');
flipArray[currentNum+1].removeClass('dont-show').addClass('back');
flipCardAnimation();
function flipCardAnimation(){
setTimeout(function(){
counter++;
currentNum++;
prevNum = currentNum - 1;
nextNum = (currentNum == numFlipImages-1) ? 0 : currentNum + 1;
if(currentNum == numFlipImages){
currentNum = 0;
prevNum = numFlipImages - 1;
nextNum = 1;
}
$('.flip-card').toggleClass('back');
// changes made to dom after the animation is completed
setTimeout(function(){
flipArray[prevNum].addClass('dont-show').removeClass('back');
flipArray[nextNum].removeClass('dont-show');
//counter used to add a transformX(180deg) to every second element in the array
if(counter % 2 == 0){
flipArray[nextNum].addClass('back');
}
},1200);
flipCardAnimation();
}, 4000)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment