Card Flip

by justjohn

HTML

<section class="digit">
    <div class="card back">
        <div class="top">2T</div>
        <div class="bottom">1B</div>
    </div>
    <div class="card active transform">
        <figure class="front">
            <div class="top">1T</div>
        </figure>
        <figure class="back">
            <div class="bottom">2B</div>
        </figure>
    </div>
</section>

SCSS

.digit {
    position: relative;
    width: 150px;
    height: 260px;
    margin: 30px;
    border: 1px solid #CCCCCC;
    
    perspective: 800px;
    -webkit-perspective: 800px;
    
    .card {
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        position: absolute;
    
        div {
            font-size: 40px;
            text-align: center;
            line-height: 130px;
        }
    
        .top {
            background: red;
            position: absolute;
            top: 0;
            height: 50%;    
            width: 100%;
        }
        .bottom {
            background: blue;
            position: absolute;
            top: 50%;
            height: 50%;    
            width: 100%;
        }
        
    }

    .transform {
        transition: transform 1.0s ease;
        -webkit-transition: -webkit-transform 1.0s ease;
    }
    
    .active {
        transform-style: preserve-3d;
        -webkit-transform-style: preserve-3d;
    
        &.flipped {
            transform: rotateX( -180deg );
            -webkit-transform: rotateX( -180deg );
        }
    
        figure {
            margin: 0;        
            display: block;
            position: absolute;
            width: 100%;
            height: 100%;
            backface-visibility: hidden;
            -webkit-backface-visibility: hidden;
    
            div {
                backface-visibility: hidden;
                -webkit-backface-visibility: hidden;
            }    
        }
        .back {
            transform: rotateX( 180deg );
            -webkit-transform: rotateX( 180deg );
        }
    }
}

JavaScript

var i = 1;
$(".digit").click(function(e) {
    var value = i++;
    var digit = this;
    
    var active_top    = $(".active .top", this),
        active_bottom = $(".active .bottom", this),
        back_top      = $(".back .top", this),
        back_bottom   = $(".back .bottom", this);
    
    $(".card", digit).addClass("transform");
    $(".card", digit).addClass("flipped");
    
    setTimeout(function() {
        // update first
        active_top.html(i + 'T');
        back_bottom.html(i + 'B');
        
        $(".card", digit).removeClass("transform");
        $(".card", digit).removeClass("flipped");
        
        back_top.html((i+1) + 'T');
        active_bottom.html((i+1) + 'B');
    }, 1000)
});