プラグイン作成の練習。
スクロールと同時にランダムに動くプラグインを作成しました。
基本ソースは以下。
■HTML
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>Parallax Test</title> <meta name="keywords" content=""> <meta name="description" content=""> <link rel="stylesheet" href="css/style.css" media="all"> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> <script src="js/jquery.randomScroll.js"></script> <script> $(function() { $("#parallax").shparallax({ scrollValueDiv : "#scrollValue" }); }); </script> </head> <body> <h1>Just scroll it.</h1> <p class="indicator">スクロール値 | <span id="scrollValue">0</span></p> <ul id="parallax"> <li id="item1"></li> <li id="item2"></li> <li id="item3"></li> <li id="item4"></li> <li id="item5"></li> </ul> </body> </html>
■CSS
body { height: 3300px; } h1 { font-size: 100%; } .indicator { margin: 0; position: fixed; right: 10px; top: 10px; } li { display: block; height: 60px; position: fixed; top: 40px; width: 60px; } #item1 { background: #000; left: 20px; } #item2 { background: #333; left: 100px; } #item3 { background: #ff358B; left: 180px; } #item4 { background: #01b0f0; left: 260px; } #item5 { background: #aeee00; left: 340px; }
■JS
jquery plugin を作る際の基本ルール。
まず、ファイル名は「jquery.puluginName.js」というように。
そして先頭に ; を付けるのだが、これは先に読むファイルが;で閉じられて無かった場合のバグを防ぐ為に。
なので基本書式は、
;(function($) { // code.. })(jQuery);
となる。
そして、セレクタは勿論thisとなるが、オプションを指定したい場合、プラグイン呼び出し時に、
$(function() { $("body").myplugin({ someoption: "optionValue" }); });
の様に記述すると、プラグインの中で
var option = option.someoption;
といった具合に使う事ができる。
;(function($) { $.fn.shparallax = function(options) { var targetUl = $(this); var lis = targetUl.find("li"); var leftValues = {}; var top = $(lis[0]).offset().top; // initial y value for(var i=0; i<lis.length; i++){ leftValues[i] = $(lis[i]).offset().left; // each x value } $(window).scroll(function(){ var value = $(this).scrollTop(); // scroll amount $(options.scrollValueDiv).text(value); // add top and amount depends on scroll amount. for(var i=0; i<lis.length; i++){ var topamt = value / 4 * Math.sin( Math.random() * 100 / 180 * Math.PI); var leftamt = value / 4 * Math.cos(Math.random() * 100 / 180 * Math.PI); $(lis[i]).css({'top': top + topamt, 'left' : leftValues[i] + leftamt}); } }); } })(jQuery);
今回は練習の為にランダムにしたが、
topamt やleftamtの値をランダムにせず、それぞれ指定してやればパララックスぽい動きも可能だと思うよ。