photo credit: Daveybot via photopin cc
こんばんは、ボーノです。
Webサイトを作っていて、初めてパララックス(視差)を実装してみました。
意外と手軽でしかも一気にリッチなサイトになるので、これから重宝しそう。
さて、メモメモ。
実装はこれだけ
例えば3層のレイヤーにしたかったら、下記のように書いてみる。
HTML
3つの要素を入れ子にする。
1 2 3 4 5 6 7 8 | <div id="content-bottom"> <div id="content-middle"> <div id="content-top"> <h1 class="hoge">例えばここにメッセージを書く</h1> </div> </div> </div> |
CSS
それぞれに背景画像を設定しておく。repeat-yは何を作りたいかによって必要かどうかが変わってくる。
縦に長いコンテンツで、連続して背景を使用したい場合はrepeat-yが必要。
1 2 3 4 5 6 7 8 9 10 | #content-bottom { background: url(../img/bottom.png) repeat-y fixed center 0; } #content-middle { background: url(../img/middle.png) repeat-y fixed center 0; } #content-top { background: url(../img/top.png) repeat-y fixed center 0; } |
JavaScript
スクロールが起きる度にparallax関数を呼び、その中でスクロール量を取得する。
その量に応じて、背景画像のシフト量を決定する。
そしてそのシフト量を、背景画像ごとに変えれば良い。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | var parallax = function(){ var st = $(window).scrollTop(); $('#content-img-3').css({ backgroundPosition: 'center ' + Math.floor(-st/10) +'px' }); $('#content-img-2').css({ backgroundPosition: 'center ' + Math.floor(-st/5) +'px' }); $('#content-img-1').css({ backgroundPosition: 'center ' + Math.floor(-st/2.5) +'px' }); } parallax(); $(window).scroll(function(){ parallax(); }); |
コツは
- 背景画像は透過していないとその後ろの画像が隠れてしまうため、視差が生まれない。透過が可能な、PNGやJPEG形式で画像を作ること。
透過率は少しずつ下げる + 画像は少しずつ小さくする
こうすることで、奥の物がより立体的に遠くに見える。これはオススメ。
参考書籍
内容は下記書籍を参考にしました。
図付きでパララックスの作り方を解説してくれるのでとても分かりやすかったです。(p.193〜196がおすすめ)。