JavaScriptでトランプをめくるアニメーションを作成してみた


はじめに

カードをめくるアニメーションを作成してみました。

1. フォルダー構成

フォルダー構成は以下のようになります

.
 ├── card_turning.html
 ├── cardTurning.js
 ├── clover11.js   
 └── backcard.png

2. 実装

コードは以下のようになります。

card_turning.html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>カードを捲るアニメーションプログラム</title>
</head>
<body>
    </div>
        <div>
            <img id='img' src='./backcard.png'/>
        </div>
        <div>
            <button id="button">めくる</button>
        </div>
    <div>
    <script src='./script.js'></script>
</body>
</html>

以下はJavaScriptのコードになります。

cardTurning.js
const buttonElem = document.getElementById('button');
let isBack = true;

if(buttonElem !== null){
    buttonElem.addEventListener('click', () => {
        const element = document.getElementById('img');
        if(element !== null){
            let imagePath = isBack ? './clover11.png' : './backcard.png';
            rotationAnimationLoop(element, imagePath, 0);
            isBack = !isBack;
        }
    });
}
/* カードを捲る処理を指定された角度になるまでループさせる関数
* @param  {Object} element   imgタグのElement Object
* @param  {String} imagePath 画像のパス
* @return {Number} deg       カードの回転角度
*/
const rotationAnimationLoop = (element, imagePath, deg) =>{
    if( deg <= 180 ){
        rotationAnimation(element, imagePath, deg);
        setTimeout( 
            () => {
                rotationAnimationLoop(element, imagePath, deg+= 5 ) 
            }, 
        1 );
    }
}

/* カードを捲る処理
* @param  {Object} element   imgタグのElement Object
* @param  {String} imagePath 画像のパス
* @return {Number} deg       カードの回転角度
*/
const rotationAnimation = (element, imagePath, deg) =>{
    if ( 90 === deg ){
        element.src =  imagePath;
    }else {
        element.style.webkitTransform = 'rotateY(' + deg + 'deg)';
    }
}

3. 結果

結果は、こんな感じになります。