[JS]これを使うだけでWebサイトのインタラクションやレイアウトがかなりよくなる、便利でちょっとずるいスクリプトのまとめ
Post on:2016年7月15日
sponsorsr
縦長ページのスクロール エフェクトで再スクロールや上にスクロールする時にも適用したい、高さ指定のない画像を読み込む時にスクロールバーががっくんがっくんするのを避けたい、美しいレイアウトを簡単に実装したい、そんな便利でちょっとずるいスクリプトを紹介します。

- ScrollTrigger
 - ScrollTriggerの使い方
 - Scrollbear
 - Scrollbearの使い方
 - Barba.js
 - Barba.jsの使い方
 - Isometric Grids
 - Isometric Gridsの使い方
 - Multiple.js
 - Multiple.jsの使い方
 - anime.js
 - anime.jsの使い方
 
ScrollTrigger
ユーザーがスクロールすると、要素にアニメーションが適用されるスクリプトはいくつかありますが、その多くは一度アニメーションが適用されると再び適用されません。下にスクロールしてアニメーションを楽しみ、上にスクロールすると何も起きず、再度下にスクロールしても何も起きない、よく見かけると思います。それならそもそもいらないんじゃないかとも思えます。
ScrollTriggerはrequestAnimationFrameを使用し、要素のスクロール ポジションに基づいてアニメーションを適用させるので、下にスクロールした時だけでなく、上にスクロールした時、繰り返し下にスクロールした時にも同様に適用することができます。

ScrollTrigger
ScrollTrigger -GitHub
デモでは下にスクロールした時はもちろんのこと、上にスクロールした時にもアニメーションを適用できます。

デモページ: 下にスクロール

デモページ: 上にスクロール
ScrollTriggerの使い方
Step 1: 外部スクリプトとJavaScript
当スクリプトを外部ファイルとして記述し、スクリプトを初期化します。
| 
					 1 2 3 4 5 6 7 8 9 10 11  | 
						<body>   ...   コンテンツ   ...   <script src="ScrollTrigger.min.js"></script>   <script>   document.addEventListener('DOMContentLoaded', function(){     ScrollTrigger.init();   });   </script> </body>  | 
					
初期化時のパラメータは「bindTo」と「scrollIn」の2つで、オプションです。
「bindTo」はトリガーとなるHTML要素で、デフォルトは「document.body」で、特定の要素を指定することもできます。「scrollIn」はスクロールのポジションを得る要素で、デフォルトは「window」で、スクロールするdiv要素などを指定することもできます。
Step 2: HTML
アニメーションを適用する要素にdata-scrollを与えます。
| 
					 1  | 
						<div data-scroll></div>  | 
					
Step 3: アニメーションの設定
アニメーションはCSSで設定します。
その要素がビューポート上にない時は「.invisible」で、ある時は「.visible」が与えられるので、それぞれのclassにアニメーションを定義します。
| 
					 1 2 3 4 5 6 7 8 9  | 
						.invisible {     transition: opacity 0.5s ease;     opacity: 0.0; } .visible {     transition: opacity 0.5s ease;     opacity: 1.0; }  | 
					
上記の指定はフェードのアニメーションで、要素がビューポートにスクロールして入ると次第にはっきりとします。
Scrollbear
ページを表示する時に、そのページ内にある画像が読み込まれるにつれ、スクロールバーのサイズが変わり、ポジションが変化してしまいます。少しだったらそんなに気にならないかもしれませんが、画像がたくさんあるページだとイラっとする人もいるかもしれません。
Scrollbearはコンテナの高さをトレースし、画像が読み込まれてコンテナの高さが変化する時でもスクロールのポジションを維持することができるスクリプトです。

Scrollbearの使い方
Step 1: JavaScript
当スクリプトを外部ファイルとして記述し、適用するコンテンツを指定します。
| 
					 1 2 3 4 5 6 7 8 9  | 
						<body>   ...   コンテンツ   ... <script type="text/javascript" src="scrollbear.js"></script> <script type="text/javascript"> Scrollbear.start(document.querySelector('#bear')) </script> </body>  | 
					
Step 2: HTML
Scrollbearで範囲を指定できるようにidやclassを与えます。
| 
					 1 2 3 4 5  | 
						<div id='bear' style='overflow: scroll;'>     <div id='container'>         <p>content</p>     </div> </div>  | 
					
Barba.js
Webサイトを見ていてページを遷移する時に、読み込みがやたら速いサイトに出会ったことはありませんか?
Barba.jsはPJAXを使い、通常のリンクのアクションによるハードリフレッシュをなくし、HTTPリクエストと描画を最小限に抑え、更にエフェクトを加えることで、非常に高速でシームレスなページ遷移を実現する超軽量(4kb gzip)のスクリプトです。

Barba.jsはすでに実際のサイトにも利用されており、Webデザイナーの間でも話題になっているサイトもあります。
ページを移動しているにも関わらず、まるでスライダーやパネルを切り換えている感覚で遷移します。

ページの移動時に、スクリプトが利用されています。
Barba.jsの使い方
Step 1: 外部ファイル
当スクリプトを外部ファイルとして記述します。
| 
					 1 2 3 4 5 6  | 
						<body>   ...   コンテンツ   ...   <script src="barba.min.js" type="text/javascript"></script> </body>  | 
					
JSファイルは、CDNでも配布されています。
| 
					 1 2 3 4 5 6  | 
						<body>   ...   コンテンツ   ...   <script src="https://cdnjs.cloudflare.com/ajax/libs/barba.js/0.1.0/barba.min.js" type="text/javascript"></script> </body>  | 
					
Step 2: HTML
通常のHTMLに、スクリプトを適用する要素にclassを与えます。
| 
					 1 2 3 4 5  | 
						<div id="barba-wrapper">   <div class="barba-container">     ...Put here the content you wish to change between pages...   </div> </div>  | 
					
#barba-wrapperはラッパー用、.barba-containerはコンテナ用です。
Step 3: JavaScript
スクリプトを初期化して、実行します。
| 
					 1  | 
						Barba.Pjax.start();  | 
					
エフェクトやイベントの実装方法は、下記ページをご覧ください。
Isometric Grids
Isometric GridsはまるでPSDのモックアップを見ているかのような3Dのアイソメトリックのグリッドにパネルやカードを配置し、インタラクションも備えたスクリプトです。

デモではその大胆なデザインを活かした2通りのレイアウトが用意されています。一つ目は3Dのグリッドがそのままスクロールするデモです。

二つ目は固定タイプで、ヒーローヘッダのように使われています。

Isometric Gridsの使い方
Step 1: 外部ファイル
外部ファイルを</body>の上に記述します。
| 
					 1 2 3 4 5 6 7 8 9 10 11  | 
						<body>   ...   コンテンツ   ...   <script src="js/imagesloaded.pkgd.min.js"></script>   <script src="js/masonry.pkgd.min.js"></script>   <script src="js/dynamics.min.js"></script>   <script src="js/classie.js"></script>   <script src="js/animOnScroll.js"></script>   <script src="js/main.js"></script> </body>  | 
					
Step 2: HTML
各パネルをリスト要素で配置します。
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14  | 
						<div class="isolayer isolayer--scroll1 isolayer--shadow">   <ul class="grid grid--effect-flip">     <li class="grid__item">       <a class="grid__link" href="https://dribbble.com/forefathers">         <img class="grid__img layer" src="img/canvas.png" alt="Canvas Dummy" />         <img class="grid__img layer" src="img/wireframe.png" alt="Wireframe Dummy" />         <img class="grid__img layer" src="img/Dribbble1/1.jpg" alt="01" />         <span class="grid__title">Forefathers</span>       </a>     </li>     ...     ...   </ul> </div>  | 
					
Step 3: JavaScript
ラッパーを指定し、スクリプトを実行します。
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32  | 
						<script> (function() {   function getRandomInt(min, max) {     return Math.floor(Math.random() * (max - min + 1)) + min;   }   [].slice.call(document.querySelectorAll('.isolayer')).forEach(function(el) {     new IsoGrid(el, {       type : 'scrollable',       transform : 'translateX(-15vw) translateY(275px) rotateX(45deg) rotateZ(45deg)',       stackItemsAnimation : {         properties : function(pos) {           return {             translateZ: (pos+1) * 50,             rotateZ: getRandomInt(-3, 3)           };         },         options : function(pos, itemstotal) {           return {             type: dynamics.bezier,             duration: 500,             points: [{"x":0,"y":0,"cp":[{"x":0.2,"y":1}]},{"x":1,"y":1,"cp":[{"x":0.3,"y":1}]}],             //delay: (itemstotal-pos-1)*40           };         }       },       onGridLoaded : function() {         classie.add(document.body, 'grid-loaded');       }     });   }); })(); </script>  | 
					
Multiple.js
Multiple.jsは複数のパネルを半透明の美しいグラデーションにまたがり、背景を続き画像として配置することができます。非常にシンプルなHTMLで実装でき、デモを実際に見るとその美しさに感動すら覚えます。

Multiple.js
Multiple.js -GitHub
スクリプトにはオプションが用意されており、さまざまなレイアウトに簡単に変更することができます。

デモページ: ギャップ調整
背景画像やグラデーションを変更することも可能です。
右上のパネルは左のパネル群の続き画像になっています。

デモページ: 背景画像とグラデーションの変更
Multiple.jsの使い方
Step 1: 外部ファイル
当スタイルシートとスクリプトを外部ファイルとして記述します。
| 
					 1 2 3 4 5 6 7 8 9 10  | 
						<head>   ...   <link href="./multiple.css" rel="stylesheet"> </head> <body>   ...   コンテンツ ...   <script src="./multiple.min.js"></script> </body>  | 
					
Step 2: HTML
各パネルをdiv要素で実装し、classを加えます。
| 
					 1 2 3  | 
						<div class="item">コンテンツ</div> <div class="item">コンテンツ</div> <div class="item">コンテンツ</div>  | 
					
Step 3: JavaScript
適用する要素を指定し、スクリプトを実行します。
| 
					 1 2 3 4  | 
						var multiple = new Multiple({   selector: '.item',   background: 'linear-gradient(#273463, #8B4256)' });  | 
					
パネル毎に不透明度をしたい時は、個別に記述します。
| 
					 1 2 3 4 5 6 7 8 9 10 11  | 
						new Multiple({   selector: '.item.second',   background: 'linear-gradient(rgb(70, 106, 177), #32A668)',   opacity: true }); new Multiple({   selector: '.item.third',   background: 'linear-gradient(rgb(70, 106, 177), #32A668)',   opacity: .9 });  | 
					
anime.js
anime.jsはその名の通りWebページにアニメを適用する軽量のスクリプトで、CSSアニメーションを使ってDOM要素やSVG、JavaScriptのオブジェクトで機能します。

デモではanime.jsを使った楽しいアニメーションを楽しめます。

anime.jsの使い方
Step 1: 外部ファイル
当スクリプトを外部ファイルとして記述します。
| 
					 1 2 3 4 5 6  | 
						<body>   ...   コンテンツ   ...   <script src="anime.min.js"></script> </body>  | 
					
Step 2: HTML
HTMLは非常にシンプルで、アニメーションさせたい要素を指定できるようclassやidを付与しておきます。
| 
					 1 2 3  | 
						<article class="green">   <div class="blue"></div> </article>  | 
					
Step 3: アニメーションの設定
JavaScriptでアニメーションを適用する要素を指定し、アニメーションを定義します。
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17  | 
						anime({   targets: 'div',   translateX: '13rem',   rotate: {     value: 180,     duration: 1500,     easing: 'easeInOutQuad'   },   scale: {     value: 2,     delay: 150,     duration: 850,     easing: 'easeInOutExpo',   },   loop: true,   direction: 'alternate' });  | 
					
sponsors











