見出し画像

ページ遷移時にアニメーションをつける


お洒落なサイトでよく実装されているのが、「ページ遷移時のアニメーション」ですね。

例えば、企業のアイコンを表示させたり、画面をスライドさせたり、フェードインさせたり、様々なアニメーションをつけてユーザーを飽きさせないようにしてます。

(あまりやりすぎてるサイトは離脱率が上がりそうですが)


 jQueryのプラグインで有名どころとしてはANIMSITIONですね。


今回は、プラグインを使用せず、ページ遷移時のアニメーションを実装してみます。

参考にしたサイト、は記事最下部にリンク貼っておきます。


ページ遷移時のアニメーション

まずは、デモを御覧ください。

→ デモサイト


こんな感じで、LINKをクリックした時にアニメーションが走るようになっています。

ページ読み込み時にも時間差でアニメーションを実行させると、見栄えが良さそうですね。


ざっくりこれからやることを説明しておくと、

bodyの擬似要素にアニメーション用のスタイルをあてる
aタグをクリックした時、is-slideを外す
is-slideが外れた時、擬似要素をアニメーションしてbodyを表示させる


HTML

<body class="is-slide" id="page-animate">

</body>

body要素にクラスをつけて、CSSでアニメーションさせるシンプルなものです。

擬似要素にスタイルをあてて、スライドするようなアニメーションを作っていきます。


今回作るパーツは2つ。

画面遷移する前、bodyを隠すようにスライドする要素
画面遷移した後、bodyを表示するようにスライドする要素

それぞれbeforeとafterで作っていきます。


CSS

#page-animate::before {
 content: '';
 position: fixed;
 top: 0;
 width: 100%;
 height: 100%;
 background-color: #333;
 z-index: 9999;
 pointer-events: none;
 right: 100%;
 -webkit-transition: right 0.8s cubic-bezier(0.4, 0, 0.2, 1);
 transition: right 0.8s cubic-bezier(0.4, 0, 0.2, 1);
}

#page-animate::after {
 content: '';
 position: fixed;
 top: 0;
 width: 100%;
 height: 100%;
 background-color: #333;
 z-index: 9999;
 pointer-events: none;
 left: 100%;
 -webkit-transition: left 0.8s cubic-bezier(0.4, 0, 0.2, 1);
 transition: left 0.8s cubic-bezier(0.4, 0, 0.2, 1);
}

#page-animate.is-slide-in::before {
 right: 0;
}

#page-animate.is-slide::after {
 left: 0;
}

CSSはこれだけ。

is-slide-inは、リンクをクリックされた時に付与するクラスで、

このクラスをトリガーに、画面遷移前にbodyを隠すようにスライドします。


jQuery

// 画面が読み込まれた時、is-slideを外し、アニメーションさせる
$(window).on('load', function(){
 $('body').removeClass('is-slide');
});

$(function() {
 // ハッシュリンク(#)と別ウィンドウでページを開く場合は実行しない

 $('a:not([href^="#"]):not([target])').on('click', function(e){
   e.preventDefault();         // ページ遷移を一旦キャンセル
   url = $(this).attr('href'); // 遷移先のURLを取得

   if (url !== '') {
     $('body').addClass('is-slide-in'); // 画面遷移前のアニメーション is-slide-in

     setTimeout(function () {
       window.location = url;  // 0.7秒後に取得したURLに遷移
     }, 700);
   }
   return false;
 });

});


解説はコメントに書いている通りですが、

画面が表示された時にクラスを外し、bodyのafterをアニメーションさせます。

aタグをクリックされた時、is-slide-inクラスを付与して、アニメーションさせてbodyを隠しつつ、0.7秒後にはページ遷移します。



かなり短いコードですが、

これだけでページ遷移のアニメーションは実装できてしまうので、かなり簡単ですね。


少しでも参考になれば幸いです。


参考サイト


サポートいただければ嬉しいです。