Posted on

全画面ページを簡単に作成!fullpage.jsの使い方とTIPS集

案件で全画面ページを簡単に作るプラグイン「fullpage.js」を使用する事がありました。

今回、レスポンシブ対応にあたって、文章等が1ページの範囲を超える場合があり、その際はスクロールバーを表示してスクロールできるようにしたいため、scrolloverflow.jsも使用しました。

そちらの簡単な使い方とハマった所をtipsとして取り上げます。

初期設定

まずは、必要な読み込みファイルから。

fullpage.js 公式サイト

まず、表示させたいページに必要なCSSとjsを読み込みます。

  1. <!-- css -->  
  2. <link rel="stylesheet" href="css/jquery.fullpage.css">  
  3.   
  4. <!-- js -->  
  5. <script src="js/jquery-1.12.0.min.js"></script>  
  6. <script src="js/scrolloverflow.js"></script>  
  7. <script src="js/jquery.fullpage.js"></script>  

全画面ページにしたい所は起点の要素(今回はIDがfullpageの要素)と、その子クラスにsectionの名前を付けます。

横スライドも欲しい場合は、section要素にその子のクラスにslideという名前を付けます。

  1. <div id="fullpage">  
  2.     <div class="section">Some section</div>  
  3.     <div class="section">Some section</div>  
  4.     <div class="section">Some section</div>  
  5.         <div class="slide"> Slide 1 </div>  
  6.         <div class="slide"> Slide 2 </div>  
  7.         <div class="slide"> Slide 3 </div>  
  8.         <div class="slide"> Slide 4 </div>  
  9.     <div class="section">Some section</div>  
  10. </div>  

jQueryを使って呼び出します。

  1. $('#fullpage').fullpage({  
  2.    anchors: ['page1', 'page2', 'page3', 'page4'], // ページのアンカー名を指定  
  3.    menu: '#global-menu', // グローバルメニューのID名  
  4.    scrollOverflow: true, //全画面よりコンテンツが多い場合スクロールバーを出すかどうか  
  5.    loopHorizontal:false, //横スライダーをループさせない  
  6.    touchSensitivity: 16, //タッチデバイスでのセクション切替の強さの閾値  
  7.    afterLoad: function (anchorLink, index) {  
  8.     //セクションが読み込み終わりのイベント  
  9.     if (index === 1) {  
  10.      //TOPロード時  
  11.       
  12.     }else if(index === $('#fullpage .section').length){  
  13.      //最下ページ時  
  14.     }else{  
  15.      //その他のページの時  
  16.     }  
  17.    },  
  18.    afterSlideLoad: function (anchorLink, index, slideAnchor, slideIndex) {  
  19.      // スライドが読み込み終わった後のイベント  
  20.    },  
  21.    onLeave: function (index, nextIndex, direction) {  
  22.      // セクションを離れた時のイベント  
  23.    },  
  24.    onSlideLeave: function (anchorLink, index, slideIndex, direction, nextSlideIndex) {  
  25.      // スライドを離れた時のイベント  
  26.    },  
  27.    afterResize: function () {  
  28.     // リサイズ後のイベント  
  29.   }  
  30. });  

グローバルメニューが要る場合には、上記menu:"#global-menu"のように指定して、li要素のdata-menuanchorに上記anchors配列で指定した名前と対応させます。

そうすると、グルーバルメニューのクラスに現在居るページはactiveが付きます。ページが遷移される度に現在居るクラスにactiveが付き、移動元ページのactiveクラスは外れますので、メニューのON/OFFのCSSの装飾などが簡単に作れます。

  1. <ul id="global-menu">  
  2.    <li data-menuanchor="page1" class="active nav__item"><a href="#top">page1</a></li>  
  3.    <li data-menuanchor="page2" class="nav__item"><a href="#service">page2</a></li>  
  4.    <li data-menuanchor="page3" class="nav__item"><a href="#demo">page3</a></li>  
  5.    <li data-menuanchor="page4" class="nav__item"><a href="#company">page4</a>  
  6. </li></ul>  

これで、縦4ページ、3ページ目に横に4スライドある全画面ページが出来上がったと思います。

TIPS

作成に当たって色々とありましたので、そこで得たTipsをドドーンと紹介しちゃいます。

可変サイズ対応

全画面のページのサイズが確定した後にAJAXやdisplay:noneしていた要素を表示させて、表示させている要素が増えた場合、スクロールする領域が足りない事が起きたりします。その際は、rebuild()関数を呼び出して、再度サイズ計算し新たなページのサイズを確定させます。

  1. // フェードイン・フェードアウトの後fullpage.js再計算  
  2. $("#recruit-space").fadeToggle(500,function(){  
  3.     $.fn.fullpage.reBuild();  
  4. })  

fullpage.jsの読み込み後に何かをさせたい場合

jQueryのロード時とfullpage.jsのロード時はタイミングとして別になるので、 fullpage.jsが読み込まれた後に処理を走らせたい場合は、afterRender以下に処理を書きます。

  1. afterRender: function () {  
  2.     //(例)クリッカブルマップレスポンシブ  
  3.      $('img[usemap]').rwdImageMaps();  
  4. }  

ページを遷移させる度にGoogle Analyticsのコードを送る

fullpage.jsは1ページを複数ページとして見せているだけなので、普通にGoogle Analyticsコードを貼っても該当ページの読み込み時に1回しか送られません。

貼るコードを分けて、縦ページの遷移、横ページをスライドさせた時に、Analyticsのコードを送るように書けば思うようなデータが取れます。

通常のアナリティクスコード読み込みの時に、下の方にあるga('send', 'pageview');を外します。

  1. <script>  
  2.   (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){  
  3.   (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),  
  4.   m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)  
  5.   })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');  
  6.   
  7.   ga('create', 'UA-XXXXXXXX-XX', 'auto');  
  8. </script>  

そして、fullpage.jsの横スライドが読み込まれた際に起きるイベントafterSlideLoad内にga('send'...のコードを書きます。

  1. afterSlideLoad: function(anchorLink, index, slideAnchor, slideIndex) {  
  2.    ga('send', 'pageview', { 'page': anchorLink, 'title': slideAnchor });  
  3. },  

縦ページ遷移に対応するにはadterLoadイベント内に記述します。

  1. afterLoad: function (anchorLink, index) {  
  2.    ga('send', 'pageview', { 'page': anchorLink, 'title':anchorLink });                 
  3. }  

まとめ

SPA風にページが手軽に作れたり、アイデア次第で面白いページが作れると思います。その分独自のライフサイクルやイベントがあるのでハマり所があったり、SEO的にはどうなるんだろうと思う所がありましたが、ここまで対応できれば普通に使えそうですね。

また何かあったら追記しようと思います。

fullpage.js 公式サイト