jQueryでフレーム毎に表示時間を変更できるスライドショーのプラグイン
- 2013/03/24
サイトのメインビジュアルをスライド表示にした場合、最後のフレームでためを作りたい場合があります。そんな場合は、フレーム毎で表示時間を変更できる「mainVisual_slide」をカスタマイズして使ってください。
サンプルの確認とダウンロードができます。
以前、急遽必要になり作りましたが、フレーム枚数の変更時に面倒なのでバージョンアップしたいと思いつつ放置(笑)
でも、とりあえず使えます。
mainVisual_slideを使ったサンプル
このブログの記事用にアップロードしていた画像を4つ使ってサンプルを作ってみました。4枚目のWEB-LABOのロゴを長めにしています。
mainVisual_slideのダウンロードはコチラ
- ダウンロード(mainVisual_slide.zip)
使い方
mainVisual_slide.zipをダウンロードして解凍します。
HTMLの記述
<script type="text/javascript" src="jquery-1.8.3.min.js">;</script> <script type="text/javascript" src="mainVisual_slide.js"></script> <link href="mainVisual_slide.css" rel="stylesheet" type="text/css">
HTMLのHEAD部分には、jQuery本体、mainVisual_slideのJSとCSSの読み込みを記述します。
<div id="slide"> <img src="mv1.jpg" id="pic1" alt="" /> <img src="mv2.jpg" id="pic2" alt="" /> <img src="mv3.jpg" id="pic3" alt="" /> <img src="mv4.jpg" id="pic4" alt="" /> </div>
img要素には、id要素で「pic1」から「pic2」「pic3」と連番を振って、ラッパー要素(親要素)には、「slide」というid名をつけます。
※画像のファイル名は、id名と合わせる必要はありません。
mainVisual_slide.jsのカスタマイズ
まずは、変数や配列へのパラメータの設定です。
var start = 0; //スタート時のフェードイン(しないならゼロを代入) var fadeoutSP = new Array(2000,2000,2000,2000); //フェードアウトのスピード(1枚目,2枚目,3枚目,4枚目) var fadeinSP = new Array(1000,1000,1000,1000); //フェードインのスピード(1枚目,2枚目,3枚目,4枚目) var dispTM = new Array(3000,3000,3000,8000); //表示時間(1枚目,2枚目,3枚目,4枚目)
ここで、各スライドの表示時間やフェードイン・フェードアウトの設定を行います。この時、1000が1秒間になります。5秒間表示したければ5000を設定します。
配列のdispTMが各スライドの表示時間になります。サンプルでは、1枚目から3枚目までは3秒、最後の4枚目は8秒表示するようになっています。
フェードインやフェードアウトについてもスライドごとに設定できますが、表示時間との関係もあるので試しながら使ってください。
続いて、各スライドの関数部分です。
スライドが4枚であれば変更する必要はありません。
// 【シーン1】ページ読み込み直後に表示する最初の画像 $(window).load(function() { $('#slide img').css({opacity:'0'}); $('#slide img#pic1').stop().animate({opacity:'1'},start); setTimeout(function(){scene2();},dispTM[0]); }); // 【シーン1】ループ後に表示される最初の画像 function scene1() { $('#slide img#pic4').stop().animate({opacity:'0'},fadeoutSP[0]); $('#slide img#pic1').stop().animate({opacity:'1'},fadeinSP[0]); setTimeout(function(){scene2();},dispTM[0]); }; // 【シーン2】2番目に表示される画像 function scene2() { $('#slide img#pic1').stop().animate({opacity:'0'},fadeoutSP[1]); $('#slide img#pic2').stop().animate({opacity:'1'},fadeinSP[1]); setTimeout(function(){scene3();},dispTM[1]); }; // 【シーン3】3番目に表示される画像 function scene3() { $('#slide img#pic2').stop().animate({opacity:'0'},fadeoutSP[2]); $('#slide img#pic3').stop().animate({opacity:'1'},fadeinSP[2]); setTimeout(function(){scene4();},dispTM[2]); }; // 【シーン4】4番目に表示される画像 function scene4() { $('#slide img#pic3').stop().animate({opacity:'0'},fadeoutSP[3]); $('#slide img#pic4').stop().animate({opacity:'1'},fadeinSP[3]); setTimeout(function(){scene1();},dispTM[3]); };
スライドが3枚の場合
シーン4の関数部分を削除して、26行を修正します。
// 【シーン1】ページ読み込み直後に表示する最初の画像 $(window).load(function() { $('#slide img').css({opacity:'0'}); $('#slide img#pic1').stop().animate({opacity:'1'},start); setTimeout(function(){scene2();},dispTM[0]); }); // 【シーン1】ループ後に表示される最初の画像 function scene1() { $('#slide img#pic4').stop().animate({opacity:'0'},fadeoutSP[0]); $('#slide img#pic1').stop().animate({opacity:'1'},fadeinSP[0]); setTimeout(function(){scene2();},dispTM[0]); }; // 【シーン2】2番目に表示される画像 function scene2() { $('#slide img#pic1').stop().animate({opacity:'0'},fadeoutSP[1]); $('#slide img#pic2').stop().animate({opacity:'1'},fadeinSP[1]); setTimeout(function(){scene3();},dispTM[1]); }; // 【シーン3】3番目に表示される画像 function scene3() { $('#slide img#pic2').stop().animate({opacity:'0'},fadeoutSP[2]); $('#slide img#pic3').stop().animate({opacity:'1'},fadeinSP[2]); setTimeout(function(){scene1();},dispTM[2]); };
【修正前】setTimeout(function(){scene4();},dispTM[2]);
↓
【修正後】setTimeout(function(){scene1();},dispTM[2]);
これにより、3枚目から1枚目に戻るようになります。
スライドが5枚の場合
まずは、パラメータ用の配列に5枚目用を追加します。
各配列の要素数が5つになるようにしてください。
var fadeoutSP = new Array(2000,2000,2000,2000,2000); //フェードアウトのスピード(1枚目,2枚目,3枚目,4枚目,5枚目) var fadeinSP = new Array(1000,1000,1000,1000,1000); //フェードインのスピード(1枚目,2枚目,3枚目,4枚目,5枚目) var dispTM = new Array(3000,3000,3000,3000,8000); //表示時間(1枚目,2枚目,3枚目,4枚目,5枚目)
// 【シーン1】ページ読み込み直後に表示する最初の画像 $(window).load(function() { $('#slide img').css({opacity:'0'}); $('#slide img#pic1').stop().animate({opacity:'1'},start); setTimeout(function(){scene2();},dispTM[0]); }); // 【シーン1】ループ後に表示される最初の画像 function scene1() { $('#slide img#pic4').stop().animate({opacity:'0'},fadeoutSP[0]); $('#slide img#pic1').stop().animate({opacity:'1'},fadeinSP[0]); setTimeout(function(){scene2();},dispTM[0]); }; // 【シーン2】2番目に表示される画像 function scene2() { $('#slide img#pic1').stop().animate({opacity:'0'},fadeoutSP[1]); $('#slide img#pic2').stop().animate({opacity:'1'},fadeinSP[1]); setTimeout(function(){scene3();},dispTM[1]); }; // 【シーン3】3番目に表示される画像 function scene3() { $('#slide img#pic2').stop().animate({opacity:'0'},fadeoutSP[2]); $('#slide img#pic3').stop().animate({opacity:'1'},fadeinSP[2]); setTimeout(function(){scene4();},dispTM[2]); }; // 【シーン4】4番目に表示される画像 function scene4() { $('#slide img#pic3').stop().animate({opacity:'0'},fadeoutSP[3]); $('#slide img#pic4').stop().animate({opacity:'1'},fadeinSP[3]); setTimeout(function(){scene5();},dispTM[3]); }; // 【シーン5】5番目に表示される画像 function scene5() { $('#slide img#pic4').stop().animate({opacity:'0'},fadeoutSP[4]); $('#slide img#pic5').stop().animate({opacity:'1'},fadeinSP[4]); setTimeout(function(){scene1();},dispTM[4]); };
【33行目修正前】setTimeout(function(){scene1();},dispTM[3]);
↓
【33行目修正後】setTimeout(function(){scene5();},dispTM[3]);
5枚目のスライドが追加されたので、33行目の「scene1();」を「scene5();」に変更します。
続いてシーン4の関数を丸々コピペしてシーン5用の関数を作ります。
// 【シーン4】4番目に表示される画像 function scene4() { $('#slide img#pic3').stop().animate({opacity:'0'},fadeoutSP[3]); $('#slide img#pic4').stop().animate({opacity:'1'},fadeinSP[3]); setTimeout(function(){scene1();},dispTM[3]); };
↓ シーン4からシーン5へ切り替わり、シーン1へ戻るように修正します。
// 【シーン5】5番目に表示される画像 function scene5() { $('#slide img#pic4').stop().animate({opacity:'0'},fadeoutSP[4]); $('#slide img#pic5').stop().animate({opacity:'1'},fadeinSP[4]); setTimeout(function(){scene1();},dispTM[4]); };