スライダーを作ってみよう
完成サンプル
使っているメソッド
.length; => 指定した要素個数を取得することができます。今回の場合は、画像の枚数を取得しています。
.attr(); => 指定した要素の属性を取得する。今回の場合は、クリックした要素のclass属性を取得しています。
.animate(); => 指定した要素をアニメーションさせる
<html> <head> <meta charset="UTF-8"> <link rel="stylesheet" href="./css/style.css"> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> </head> <body> <div class="slider"> <div class="slider-box"> <div> <img src="./images/slider/slider01.png" alt="" width="450" height="250"> <img src="./images/slider/slider02.png" alt="" width="450" height="250"> <img src="./images/slider/slider03.png" alt="" width="450" height="250"> </div> </div> <p class="next"> <img src="./images/slider/next.png" alt="" width="40" height="40"> </p> <p class="back"> <img src="./images/slider/back.png" alt="" width="40" height="40"> </p> </div> </body> </html>
.slider{ width: 450px; margin: 0 auto; position: relative; } .slider-box{ overflow: hidden; } .slider-box div{ width: 1350px; position: relative; } .slider-box div img{ float: left; } .slider .next, .slider .back{ cursor: pointer; margin-top: -20px; opacity: .5; position: absolute; } .slider .next{ top: 50%; right: -50px; } .slider .back{ top: 50%; left: -50px; } .slider .next:hover, .slider .back:hover{ opacity: 1; }
cssのポイント
一番大きいdivに見える範囲を設定します。
画像を囲っているdivにはすべての画像の幅分のwidthを設定してあげます。
こうすることで画像が横並びになります。
$(function(){ //画像の枚数を取得 var imgLength = $(".slider-box div img").length; //スライダーを止めるためのフラグ var flag = 1; //次に進むボタンか戻るボタンが押された場合 $(".slider .next , .slider .back").click(function(){ //クリックされた要素のクラス属性を取得 var attrClass = $(this).attr("class"); //クラス名がnextの時 if(attrClass == "next"){ if(imgLength <= flag){ return false; } $(".slider-box div").animate({ left : "-=450px" },1000); flag++; //クラス名がnext以外の時(backの時) }else{ if(flag <= 1){ return false; } $(".slider-box div").animate({ left : "+=450px" },1000); flag--; } }); });
jquery部分を細かく見てみよう
//次に進むボタンか戻るボタンが押された場合
$(".slider .next , .slider .back").click(function(){
~省略
});
$("セレクタ , セレクタ")
セレクタをカンマで区切ることで、複数指定することができます。
今回の場合だと、次に進むボタンか戻るボタンが押された場合に、clickイベントが処理されます。
$(".slider-box div").animate({ left : "-=450px" },1000); flag++; $(".slider-box div").animate({ left : "+=450px" },1000); flag--;
-=と+=
-=と+=は◯◯づつ足していくという意味の演算子です。
+= → 加算して代入
-= → 減算して代入
今回の場合だと、.nextを押されたら.slider-box divのleftに450px加算されて画像が動くという感じです。
$(".slider-box div").animate({ left : "-=450px" },1000); flag++; $(".slider-box div").animate({ left : "+=450px" },1000); flag--;
++と--
.nextとクリックされた場合の時の処理に「flag++;」という記述があります。
また、.backのときには「flag--;」という記述があります。
++ → 1加算する
-- → 1減算する
今回の場合だと、.nextを押される度にflagに数値が1づつ足され、.backが押される度にflagに数値が1づつ引かれています。
//画像の枚数を取得 var imgLength = $(".slider-box div img").length; if(imgLength <= flag){ return false; }
スライダーを止める処理
このスライダーを止める処理が大事なポイントとなります。この処理がないと、どこまでもスライドしていってしまいます。
変数imgLengthで画像の枚数を取得し(取得結果は3となります。)flagの数と比較します。
flagは、クリックされるごとに1増えたり、1減ったりする変数です。
もしもflagが画像の枚数を超えたら「return false;」で処理と止めます。 if文ってなんだっけ
return false;が読み込まれると、その下のプログラムは読まれず、処理をキャンセルすることができます。