2012/07/12
スクロールに応じてコンテンツにエフェクト効果をつける - scrolldeck –
今回はスクロール関係のプラグインを試してみたので、そちらの説明をさせていただきます。
scrolldeck.jsというプラグインなのですが、
こちらはscrolloramaというプラグインがもともとあって、それを利用したもののようです。
プラグインのプラグインみたいな感じなんでしょうか。
http://johnpolacek.github.com/scrolldeck.js/
同じスクロール効果のプラグインですが
違いとしては、
scrolloramaが、スクリプトで、アニメーションの速さや効果、開始時、終了時を設定しないといけないのに対し、
scrolldeckは、クラスに決められたスタイルを指定し、「data-animation」というdata属性を使用し、動きを指定するだけでOKという形です。
(HTML5ですのでご注意ください!)
デモを作成したので、よろしければご覧ください。
scrolldeckの使い方
head内に以下のソースを読み込み、
1 2 3 4 5 | <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script src="js/fix.js"></script> <script src="js/jquery.easing.1.3.js"></script> <script src="js/jquery.scrollorama.js"></script> <script src="js/jquery.scrolldeck.js"></script> |
bodyの閉じタグの前に、
1 2 3 4 5 6 7 8 9 10 | <script> $(document).ready(function() { var deck = new $.scrolldeck({ buttons: '.nav-button', easing: 'easeInOutExpo' }); }); </script> |
を記載し、
HTMLは、コンテンツ毎に、
1 2 3 4 | <div class="slide"></div> <div class="slide"></div> <div class="slide"></div> <div class="slide"></div> |
とします。
この場合、ダウンロードしたファイルのstlye.cssの.slideの部分をコピーしたほうが良いと思います。
あとは、効果を付けたい箇所は、以下のようにします。上記divの中に記載します。
1 2 3 4 5 6 7 8 9 10 11 12 | フェードイン <div class=animate-in" data-animation="fade-in"></div> 拡大から通常へ <div class=animate-in" data-animation="space-in"></div> 右からスライドイン <div class=animate-in" data-animation="fly-in-right"></div> 左からスライドイン <div class=animate-in" data-animation="fly-in-left"></div> 1から順番に表示※画面が固定されます。上記のdata属性を指定することも可能 <div data-build="1" class="animate-build"></div> <div data-build="2" class="animate-build"></div> <div data-build="3" class="animate-build"></div> |
demoの説明をさせていただきます。
javascriptは、上記のものと同じなので割愛します。
html
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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | <div id="wrapper"> <h1>スクロールに応じてコンテンツにエフェクト効果をつける</h1> <div class="nav"> <ul> <li><a href="#menu1" class="nav-button">メニュー1</a></li> <li><a href="#menu2" class="nav-button">メニュー2</a></li> <li><a href="#menu3" class="nav-button">メニュー3</a></li> <li><a href="#menu4" class="nav-button">メニュー4</a></li> <li><a href="#menu5" class="nav-button">メニュー5</a></li> </ul> </div> <ul> <li class="slide" id="menu1"> <h2 class="hdr">webサイト制作しています</h2> <div class="img-wrapper animate-in" data-animation="fade-in"> <img src="images/sample.JPG" width="100%"> </div> </li> <li class="slide box" id="menu2"> <h2 class="hdr">対応ブラウザは・・・</h2> <dl class="box pat1 animate-in" data-animation="fly-in-right"> <dt><img src="images/Chrome.png" width="100" class="wiggle1 chrome"></dt> <dd>なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。</dd> </dl> </li> <li class="slide box"> <dl class="box pat2 animate-in" data-animation="fly-in-left"> <dt><img src="images/Firefox.png" width="100" class="wiggle1 firefox"></dt> <dd>なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。</dd> </dl> </li> <li class="slide box"> <dl class="box pat1 animate-in" data-animation="fly-in-right"> <dt><img src="images/IE.png" width="100" class="wiggle1 ie"></dt> <dd>なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。</dd> </dl> </li> <li class="slide box"> <dl class="box pat2 animate-in" data-animation="fly-in-left"> <dt><img src="images/Safari.png" width="100" class="wiggle1 safari"></dt> <dd>なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。なにかの説明をここに入れてみたり。</dd> </dl> </li> <li class="slide" id="menu3"> <div class="msg"> <h2>レスポンシブwebサイトもできますよ!!</h2> <p data-build="1" class="animate-build">コストが安い!!</p> <p data-build="2" class="animate-build">修正が簡単!!</p> </div> </li> <li class="slide" id="menu4"> <div class="msg"> <h2 class="animate-in" data-animation="space-in">webサイトならおまかせ!!</h2> <p>お問い合わせは<a href="/contact/">コチラ</a></p> </div> </li> <li class="slide" id="menu5"> <div class="msg"> <p>おしまい</p> </div> </li> </ul> <!--//wrapper --></div> |
css
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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 | article, aside, audio, canvas, command, datalist, details, embed, figcaption, figure, footer, header, hgroup, keygen, meter, nav, output, progress, section, source, video{ display: block; margin: 0; padding:0;} #wrapper { margin: 0px auto; width: 100%; position: relative; } h1 { margin: 40px 0 0 40px; } /* body */ body { font-size: 9pt; line-height: normal; letter-spacing: normal; color: #555555; } .slide { position: relative; margin: 0; width: 100%; text-align: center; height: 100%; padding: 100px 0 200px; padding: 10rem 0 20rem; } .content { width: 100%; } .nav { width: 100%; top: 0; margin-bottom: 10px; } .nav ul { text-align: right; } .nav ul li { display: inline-block; width: 100px; background-color: #ffffff; text-align: center; padding: 5px 0; } .nav ul li a.current { font-weight: bold; color: #000; } .fixed { position: fixed; z-index: 1000; top: 0; } /* header */ .hdr { font-size: 2em; margin-bottom: 100px; } #menu1 { height: 1100px; } #menu2 li.slide { height: 200px; } li.box { height: 200px; } .msg h2 { font-size: 3em; } .msg p { font-size: 1.5em; } dl.box { overflow: hidden; clear: both; width: 90%; margin-bottom: 20px; margin: 0 auto; } .box dt { width: 150px; height: 150px; color: #FFF; text-align: center; } .pat1 dt { float: left; margin-right: 20px; } .pat1 dd { float: left; width: 60%; } .pat2 dt { float: right; margin-left: 20px; } .pat2 dd { float: left; width: 60%; } .img-wrapper img { box-shadow: 0px 0px 3px #dddddd; padding-top:300px; } .content { position: relative; } |
メニューの箇所については、クラスにnav-buttonを設定すると、
スクロールしている箇所に応じて、メニューのクラスにcurrentが追加されるので、
cssで設定すれば、どこを見ているのかというのがわかりやすくなります。
試してみた感想ですが、本家のデモと同じような形にしかできず、
コンテンツ毎の間隔を短くしようとすると、動きがおかしくなってしまいました。
ランディングページ等にはいいかもしれませんが、普通のwebサイトだと間隔広すぎてちょっと使いづらいかもしれません。
理想としては、以下のサイトのような間隔でできるいいかもしれません。
最近気になったサイトです。
このメガネ欲しい・・・
Author Profile
スターフィールド編集部
SHARE