1
0

スライドアニメーション

Posted at

はじめに

今回は、JavaScriptを使用したスライドアニメーションの実装について触れてみようと思います。私のまとめは"自分が見返せるように"という意味合いもあります。エンジニア初心者故、温かい目で見ていただけると嬉しいです。

【スライドアニメーション】

このコードを使用すると、要素を指定した方向にスライドさせることが出来ます。

function slideAnimation(element, direction, distance, duration){
    /* 開始時刻を取得 */

    const startTime = performance.now();

    /* スライドアニメーションの関数 */
    function slide(timestamp) {
        /* 現在時刻を取得し、開始時刻からの経過時間を計算 */
        const currentTime = timestamp - startTime;
        
        /* 経過時間がアニメーションの継続時間以下であれば、アニメーションを続行 */
        if (currentTime < duration) {
            /* 指定された方向に要素を移動させる */
            if (direction === "left") {
                element.style.transform = `translateX(${-currentTime * distance / duration}px)`;
            } else if (direction === "right") {
            ~~~
            }
            
            /* アニメーションを再実行 */
            requestAnimationFrame(slide);
        } else {
            /* アニメーションが終了したら、transformをクリアして初期位置に戻す */
            element.style.transform = "translate(0)";
        }
    }

    /* アニメーションを開始 */
    requestAnimationFrame(slide);
}

-slideAnimation→要素を指定した方向・距離にアニメーションさせる関数。
-element→アニメーションさせるHTML要素を指定する引数。
-direction→left,right,up,downを値として、スライドの方向を指定する引数。また、translateXが横、translateYが縦の方向。
-distance→スライドさせる距離をピクセル単位で指定する引数。
-duration→アニメーションを継続させる時間をミリ秒単位で指定する引数。

実際にコードを書くときは、上記のコードに以下のように追加することで動作させることが出来ます。

<右方向、500px分、500msec>

const element = document.getElementById("box");
slideAnimation(element, "right", 500, 500);

【二重処理】

二重処理とは、同じ処理が重複して行われることをいいます。このようなことが起きると、パフォーマンスの低下や誤った結果が出てしまう恐れがあるため、フラグを立てることで制御する必要があります。

/* フラグの初期値(条件を満たしていないためfalseで入力) */
let flag = false;
let cnt = 0;

/* while文による */
while(!flag){
    cnt++;
    console.log(cnt);
    /* 変数cntの値が7になるとflagにtrueを入力する(フラグを立たせる) */
    if(cnt == 7){
        flag = true;
    }
}

おわりに

今回はスライドアニメーションのみまとめましたが、他にもたくさんの関数が存在します。現在はシングルページを作成する課題に取り組んでおり、フェードインやフェードアウトなども使うことになると思います。エンジニアデビューへの道のりはまだまだですが、少しでも早く知識と技術を身に着け、デビューを目指していきたいです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0