jQuery の「fadeIn メソッド」等のアニメーションのメソッドを使って複数の画像を順番に表示する方法。
この例では、1つの画像から複数の画像要素を生成して、それらを順番にCSS プロパティで位置を指定し、「fadeIn メソッド」を使って表示する。
fadeIn(speed,callback) 等のアニメーションのメソッドの callback パラメータはアニメーション完了時に呼び出される関数を指定できるので、このパラメータを利用。
serial_fadeIn() という関数を作成して、その中で「fadeIn メソッド」を使って serial_fadeIn() を再帰的(?)に呼び出し、ある数(maxCount)に達したら「return」で抜け出るというもの。
imgx$ は画像要素のラップ集合で、この関数を実行する前に生成しておく。
以下は作成するserial_fadeIn() という関数の概要で、このままでは位置の指定が「count * 10 」なので斜め一列に表示される。
count = 0; function serial_fadeIn(maxCount) { if(count==maxCount) return; $(imgx$[count]).css({top: count * 10 + 'px', left: count * 10 + 'px'}).fadeIn( 100, function(){ count ++; serial_fadeIn(maxCount); }); }
画像を作成して images フォルダに配置する。
この例では画像名は「leaf.png」で高さは「20」、幅は「22」
表示する領域は div 要素として id 属性を「div#leafimage」と指定。
パラメータに生成する画像の数、画像名、高さ、幅、表示する div 要素をパラメータに取り、その画像のラップ集合を返す関数を以下のように作成。
各画像要素は「display: ‘none’, position: ‘absolute’」を指定。
親要素の表示領域は「’position’, ‘relative’」を指定。
function create_images(count, name, h, w, target) { for(i = 0; i < count ; i++){ $('<img />', { src: 'images/' + name, alt: '',height: h,width: w}).css({display: 'none', position: 'absolute' }).appendTo(target); } $(target).css('position', 'relative'); return $(target).find('img'); }
以下の関数は重複のない乱数の配列を返す。(詳細はこちら)
function generate_randomx(count) { var generated = new Array(); var generatedCount = generated.length; for(i = 0 ; i < count; i++){ var candidate = Math.floor(Math.random() * count); //今まで出力された数字と同じ場合は再度乱数を発生 for(j = 0; j < generatedCount; j++) { if(candidate == generated[j]){ candidate = Math.floor(Math.random() * count); j= -1; } } generated[i] = candidate; generatedCount++; } return generated; } [/code] <h3>作成した関数を利用して画像を表示</h3> 再帰を抜け出すための変数「count 」を外側で初期化。 画像30個のラップ集合を生成。 0 から 30 までの乱数の配列を生成。 serial_fadeIn()で30個の画像をランダムに表示。 serial_fadeIn()のパラメータには画像のラップ集合と乱数の配列を取るように修正。 全て表示したら、「imgx$.fadeOut(1000);」で画像を非表示に。他のアニメーションを連続して実行するには、fadeOut()の callback パラメータに更にアニメーションなどの関数を指定する。count = 0; imgx$ = create_images(30, 'leaf.png',20, 22,'div#leafimage' ); randomx = generate_randomx(30); serial_fadeIn(imgx$, randomx); function serial_fadeIn(img$, rand) { //count が 画像要素の総数に達したら、画像をフェードアウトして終了 if(count==img$.length) {img$.fadeOut(1000); return;} //垂直位置は「count * 10」に、水平位置をランダムに「randomx[count] * 20」に指定 $(img$[count]).css({top: count * 10 + 'px', left: rand[count] * 20 + 'px'}).fadeIn( 100, function(){ count ++; //1ずつ増やす serial_fadeIn(img$, rand); //再帰的(?)に呼び出す }); }
以下は上記をまとめたもの。
jQuery(function($){
function create_images(count, name, h, w, target) {
for(i = 0; i < count ; i++){
$('', { src: 'images/' + name, alt: '',height: h,width: w}).css({display: 'none', position: 'absolute' }).appendTo(target);
}
$(target).css('position', 'relative');
return $(target).find('img');
}
function generate_randomx(count) {
generated = new Array();
generatedCount = generated.length;
for(i = 0 ; i < count; i++){
candidate = Math.floor(Math.random() * count);
//今まで出力された数字と同じ場合は再度乱数を発生
for(j = 0; j < generatedCount; j++) {
if(candidate == generated[j]){
candidate = Math.floor(Math.random() * count);
j= -1;
}
}
generated[i] = candidate;
generatedCount++;
}
return generated;
}
count = 0;
function serial_fadeIn(img$, rand) {
if(count==img$.length) {img$.fadeOut(1000); return;}
$(img$[count]).css({top: count * 10 + 'px', left: (rand[count] * 20 + 50 ) + 'px'}).fadeIn( 100, function(){
count ++;
serial_fadeIn(img$, rand);
});
}
randomx = generate_randomx(30);
img$ = create_images(30, 'leaf.png', 23, 18, '#leafimage' );
serial_fadeIn(img$, randomx);
});
[/code]