スキップしてメイン コンテンツに移動

barba.jsとanime.jsでクールに画面遷移

 webサービスでのページ遷移をスムーズにできるbarba.jsを使って画面遷移をするときに手間取ったのでやり方を書いていきます。

 私が作ったページはこちら

 「はじめる」ボタンを押せばページ遷移が始まります。

barba.js

 barba.jsはwebページ間の遷移をネイティブのアプリケーションのように遷移するためのライブラリです。

 Github : https://github.com/luruke/barba.js

 導入にはnpmやcdnを使います。ここにはcdn用のコードを貼っておきます。
<script src="https://cdnjs.cloudflare.com/ajax/libs/barba.js/1.0.0/barba.min.js" type="text/javascript"></script>

使い方

ページ遷移の際に読み込みたい部分を、
<div id="barba-wrapper">
  <div class="barba-container">
    
  </div>
</div>
 で囲みます。その後、
Barba.Pjax.start();
 とJavaScriptにかけばbarba.jsは最小限これで動きます。

設定

 まずは公式のデモのコードを見てみます。このコードを使うと上のbarba-wrapperで囲んだ範囲がフェードアウトして遷移先のbarba-wrapperで囲まれた部分がフェードインします。
var FadeTransition = Barba.BaseTransition.extend({
  start: function() {
    /**
     * This function is automatically called as soon the Transition starts
     * this.newContainerLoading is a Promise for the loading of the new container
     * (Barba.js also comes with an handy Promise polyfill!)
     */

    // As soon the loading is finished and the old page is faded out, let's fade the new page
    Promise
      .all([this.newContainerLoading, this.fadeOut()])
      .then(this.fadeIn.bind(this));
  },

  fadeOut: function() {
    /**
     * this.oldContainer is the HTMLElement of the old Container
     */

    return $(this.oldContainer).animate({ opacity: 0 }).promise();
  },

  fadeIn: function() {
    /**
     * this.newContainer is the HTMLElement of the new Container
     * At this stage newContainer is on the DOM (inside our #barba-container and with visibility: hidden)
     * Please note, newContainer is available just after newContainerLoading is resolved!
     */

    var _this = this;
    var $el = $(this.newContainer);

    $(this.oldContainer).hide();

    $el.css({
      visibility : 'visible',
      opacity : 0
    });

    $el.animate({ opacity: 1 }, 400, function() {
      /**
       * Do not forget to call .done() as soon your transition is finished!
       * .done() will automatically remove from the DOM the old Container
       */

      _this.done();
    });
  }
});

/**
 * Next step, you have to tell Barba to use the new Transition
 */

Barba.Pjax.getTransition = function() {
  /**
   * Here you can use your own logic!
   * For example you can use different Transition based on the current page or link...
   */

  return FadeTransition;
};
(引用元:http://barbajs.org/)

 次のページのロードとfadeOut関数が終わるとfadeIn関数が呼ばれるようになっているようです。fadeOut関数とfadeIn関数の中身を書き換えれば自分の思い通りにページ遷移をすることができます。

 ページ遷移の関数を書いたら、 
Barba.Pjax.getTransition = function() {
  return 設定した関数名;
};
でページの切り替え時に、作った関数を使うように指定します。

 また、
Barba.Prefetch.init();
 とかくと、ホバーやクリック時に前もって遷移先のデータを取得し、よりスムーズにページを遷移することができます。

 ここに私が作ったデモのページ遷移用のコードを載せておきます。
Barba.Prefetch.init();

var PageTransition = Barba.BaseTransition.extend({
    start: function() {

        Promise
            .all([this.newContainerLoading, this.loadOut()])
            .then(this.loadIn.bind(this));
    },
    loadOut: function(resolve) {
        new Promise(function(resolve, reject) {
            anime({
                targets: this.oldContainer,
                translateY: '-50vw'
            });
            resolve();
        })
    },
    loadIn: function() {
        var _this = this;
        anime({
            targets: this.newContainer,
            translateY: ['80vh', 0],
            easing: 'easeInOutQuart'
        });
        $(this.oldContainer).hide();
        // 完了
        _this.done();
    },
});

Barba.Pjax.getTransition = function() {
    return PageTransition;
};

Barba.Pjax.start();
 アニメーションはanime.jsで設定しています。ページはこちら

まとめ

 barba.jsを使うと驚くほど綺麗にページを遷移できるので重宝しそう。

コメント

このブログの人気の投稿

i3wm 厨二感溢れる軽量デスクトップ環境

 皆さんは、i3というデスクトップ環境をご存知ですか?  i3(i3ウィンドウマネージャ, i3wm)は、マウスをほとんど使わずに操作することができる、超軽量デスクトップ環境です。  またi3wmは、今現在最も新しい タイル型ウィンドウマネージャー で、マウスを使わずにカタカタカタ、ッターンとショートカットを打ち込むだけで画面がどんどん変わっていくので、側から見ると厨二感溢れるデスクトップ環境となっています。  今回は、i3wmのインストール方法と、使い方を紹介します。  余談ですが、i3に関してネットで調べるときには"i3"と検索するのではなく"i3wm"と調べると、ヒットしやすくなります。(某CPUや某電気自動車などが出てくるので) i3wmのインストール  今回は、ubuntuへのインストールです。(ちなみに自分はubuntu17.04)  まずはi3wm本体のインストール $ sudo apt install i3 次にdmenuとcomptonをインストール $ sudo apt install dmenu compton dmenuはi3wmでアプリケーションを起動するときに使い、 comptonはターミナルの透過のために必要なものです。 インストールが終わったら再起動してログイン画面でデスクトップ環境を"i3"にしてログインします。 使い方  i3wmが開くと次のような質問をされます。 ~/.config/i3/config を作るか modキーは何にするか configファイルは作っておいたほうがいいと思います。  modキーはi3wmにおいてショートカットを使うときに押すキーです。これはwindowsキーやcommandキーがいいと思います。  ここにショートカットに一覧を載せておきます。  (ちなみに下の変なマークはmodキー) Basics  + ↩︎ open new terminal  +  j focus left  +  k focus down  +  l focus up  +  ; focus right  +  space toggle f

Parallels Desktop Lite -Macに無料でLinuxの仮想環境を作る

 今回は、有名な仮想化ソフト"Parallels Desktop"の無料版、"Parallels Desktop Lite"を紹介したいと思います。  では早速、仮想環境などの説明は省いてParallels Desktop Liteの説明から行きましょ う。 Parallels Desktop Liteって?  Parallels Desktop Liteはその名の通りParallels Desktopの機能限定版で、App Storeからインストールすることができます。   Parallels Desktopとは違い、Linux系osの仮想環境は無料で構築することができます。(Windowsを入れる際には課金が必要) 簡単!仮想環境の構築  Parallels Desktop Liteをインストールして開くと、次のようなウィンドウが開きます。  Linuxのisoイメージファイルは、自分でダウンロード、下の「無料システム」の部分からダウンロードのどちらでも構いません。  僕は、Ubuntuの公式ページから、Ubuntu17.04をダウンロードしました。 インストール時に気になった部分は一点だけで、 この画面の、"高速インストール"を有効にしてインストールすると、設定がおかしなことになっていて使い物になりませんでした。(あくまでも自分の場合)    このあと、新しい仮想マシンが立ち上がるので、あとはいつも通りLinuxのインストールをするだけです。 使ってみての感想  これ、めちゃめちゃ使いやすいです。  インストールしたosに"parallels tools"をインストールすると、なお使いやすい。  parallels toolsのインストールは、Linuxのインストール後、ウィンドウのどこかに通知がされると思うのでその手順に従ってください。  これには、parallelsのウィンドウサイズに合わせてosのディスプレイサイズを合わせてくれる機能や、macとのファイル共有機能、macと仮想環境との間でシームレスにコピペができる機能が含まれています。  この機能は、

ksnctf #4 Villager A 初めての書式文字列攻撃。

 ksnctfの4問目、Villager A を解きました。 問題 https://ksnctf.sweetduet.info/problem/4  問題ページにはアドレス、ID、パスワードが書かれているのでSSHでログイン。  ログインしたら、とりあえずls。 $ ls flag.txt q4 readme.txt  readmeには大したこと書いてなかった。  flag.txtはもちろん開けない。  とりあえずq4を実行してみる。 $ ./q4 What's your name? Sugita Genpaku Hi, Sugita Genpaku Do you want the flag? はい Do you want the flag? yes Do you want the flag? نعم فعلا Do you want the flag? いいえ Do you want the flag? no I see. Good bye.  "no"と答えるまで煽られ続ける模様。  ユーザーが入力した値を出力しているあたり、この前本で読んだばかりの書式文字列攻撃を使うっぽい。  いきなりアセンブリ読むのもアレなのでstringsかけてみる。  stringsコマンドは、ファイルに含まれる文字列を出力してくれる。 strings q4 /lib/ld-linux.so.2 libstdc++.so.6 __gmon_start__ _Jv_RegisterClasses __gxx_personality_v0 libm.so.6 libgcc_s.so.1 libc.so.6 _IO_stdin_used fopen puts putchar stdin printf fgets strcmp __libc_start_main CXXABI_1.3 GLIBC_2.1 GLIBC_2.0 PTRh [^_] What's your name? Hi, Do you want the flag? I see. Good bye. flag.txt  どうにかすればfopenでflag.txtの中身を出力してくれると予想。  ここでもう一度

ページビューの合計

ラベル一覧を表示