以前にここで「jQueryでシンプルなサムネイル付き画像ビューアーを作成する方法」と題して、
jQueryでの画像切替ビューアーを紹介しましたが、
これを応用して、自動で画像エリアが切り替わる
シンプルな画像スライドショーを作ってみたのでご紹介。
まずは動作のサンプルから。
※全体構成は以前の記事の物と同じにしてあります。
jQuery SIMPLE SLIDESHOW【SAMPLE1】
4枚の画像が自動でクロスフェードしてスライドショーとして切り替わり、
下部に並べてあるサムネイルをクリックすることで
特定のビジュアルに切り替えることも出来ます。
全体構成についてHTMLから。
◆HTML <div id="slideshow"> <div> <div><a href="#1"><img src="img/photo01.jpg" width="400" height="300" alt="" /></a></div> <div><a href="#2"><img src="img/photo02.jpg" width="400" height="300" alt="" /></a></div> <div><a href="#3"><img src="img/photo03.jpg" width="400" height="300" alt="" /></a></div> <div><a href="#4"><img src="img/photo04.jpg" width="400" height="300" alt="" /></a></div> </div> <ul> <li><a href="javascript:void(0);"><img src="img/photo01.jpg" width="100" height="75" alt="" /></a></li> <li><a href="javascript:void(0);"><img src="img/photo02.jpg" width="100" height="75" alt="" /></a></li> <li><a href="javascript:void(0);"><img src="img/photo03.jpg" width="100" height="75" alt="" /></a></li> <li><a href="javascript:void(0);"><img src="img/photo04.jpg" width="100" height="75" alt="" /></a></li> </ul> </div><!--/#slideshow-->
大枠をID「#slideshow」で覆い(ID名は任意)
画像が切り替わるメインビジュアル部分は
全体を<div>で囲んだ後、
切り替える個々のエリアを同じく<div>で囲います。
サムネイルは<li>リストで形成し、
切り替えるメインビジュアルとサムネイルの並び(順序)は
同じにしておく必要があります。
メインビジュアルで使用する画像も、サムネイル画像に対しても
HTML側ではIDやクラスはつけていません。
そしてこのHTMLソースに対してのCSSは以下の様に。
◆CSS
#slideshow {
margin: 0 auto;
width: 400px;
text-align: left;
}
#slideshow div {
width: 400px;
height: 300px;
overflow: hidden;
position: relative;
}
#slideshow div div {
top: 0;
left: 0;
position: absolute;
}
#slideshow ul {
width: 400px;
}
#slideshow ul li {
width: 100px;
float: left;
display: inline;
}
#slideshow .active {
filter:alpha(opacity=100)!important;
-moz-opacity: 1!important;
opacity: 1!important;
}
/* =======================================
ClearFixElements
======================================= */
#slideshow ul:after {
content: ".";
height: 0;
clear: both;
display: block;
visibility: hidden;
}
#slideshow ul {
display: inline-block;
overflow: hidden;
}
メインビジュアル部分の「#slideshow div」と「#slideshow div div」と
サムネイルの透過具合を制御する「#slideshow .active」以外に書かれている
各プロパティはサンプル画面のレイアウトを形成するものなので
あまり重要視しなくていいものになります。
そして実際に動作を実行させるスクリプトは以下の様になります。
◆SCRIPT
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
var setId = '#slideshow';
var fadeTime = 1000;
var delayTime = 5000;
$(setId + ' div div').each(function(i){
$(this).attr('id','view' + (i + 1).toString());
$(setId + ' div div').css({zIndex:'98',opacity:'0'});
$(setId + ' div div:first').css({zIndex:'99'}).stop().animate({opacity:'1'},fadeTime);
});
$(setId + ' ul li').click(function(){
clearInterval(setTimer);
var connectCont = $(setId + ' ul li').index(this);
var showCont = connectCont+1;
$(setId + ' div div#view' + (showCont)).siblings().stop().animate({opacity:'0'},fadeTime,function(){$(this).css({zIndex:'98'})});
$(setId + ' div div#view' + (showCont)).stop().animate({opacity:'1'},fadeTime,function(){$(this).css({zIndex:'99'})});
$(this).addClass('active');
$(this).siblings().removeClass('active');
timer();
});
$(setId + ' ul li:not(.active)').hover(function(){
$(this).stop().animate({opacity:'1'},200);
},function(){
$(this).stop().animate({opacity:'0.5'},200);
});
$(setId + ' ul li').css({opacity:'0.5'});
$(setId + ' ul li:first').addClass('active');
timer();
function timer() {
setTimer = setInterval(function(){
$('li.active').each(function(){
var listLengh = $(setId + ' ul li').length;
var listIndex = $(setId + ' ul li').index(this);
var listCount = listIndex+1;
if(listLengh == listCount){
$(setId + ' ul li:first').click()
} else {
$(this).next('li').click();
};
});
},delayTime);
};
});
</script>
メインビジュアル部分の<div>数に対して、それぞれ順番にIDを付け、
サムネイルの<li>の順序番号と連動させて
メインビジュアルIDの表示を切り替える構成になっています。
(この辺りの構成は以前の記事と同じ内容になっています。)
スクリプト開始部分にある
——————————————————————–
var setId = ‘#slideshow’;
var fadeTime = 1000;
var delayTime = 5000;
——————————————————————–
は上から
——————————————————————–
・該当するエリアのID名
・フェードで切り替わる際の時間
・エリアが切り替わるまでの待機時間
——————————————————————–
となっているので、
値を変更するだけでカスタマイズが可能です。
こういったスライドショーは、場合によって
マウスオーバーでスライドショー動作(自動切替)を停止させた方が
ユーザーに優しい場合があるので、
それらの動作を追加する場合は以下のスクリプトを追加します。
◆SCRIPT
hoverでスライド動作ストップ
$(setId).mouseover(function(){
clearInterval(setTimer);
}).mousemove(function(){
clearInterval(setTimer);
}).mouseout(function(){
timer();
});
この動作を追加したパターンは
以下の様になります。
jQuery SIMPLE SLIDESHOW【SAMPLE2】
スライドショーエリア(サムネイル含む)にマウスオーバーしている間は
自動で切り替わるスライドショー動作がストップします。
HTMLやスクリプトはそのままでCSSを変更するだけで、
ビジュアルエリアとサムネイルを重ね合わせた
以下の様なレイアウトパターンも簡単に実装できます。
jQuery SIMPLE SLIDESHOW【SAMPLE3】
HTMLとCSSを極力シンプルな形ですむように構成してあるので
さまざまなレイアウトパターンでスライドショーを実装することができると思います。
jQueryでのスライドショーが必要になった際に是非。。。
