ユーザーがボタンを押して次の画像に移動したときに、画像のトランジションをいくつか処理しています。非常に狭い複数の画像が隣り合っている場合、それらの画像はすべて同時に遷移します。そのため、画像の幅を確認し、細いものを配列に追加してから、配列内の各オブジェクトでトランジションを実行します。配列内の各画像のアニメーション間に少し遅延を作成したかったので、1 秒のタイムアウト後に jQuery.animate を実行しようとしています。
成功せずにタイムアウトを機能させようとした方法は次のとおりです。
1.
for (i=0; i < set.length; i++) {
if (i != 0) {
setTimeout(function() { set[i].transitionOut($('#gallery'), 562) }, 100);
} else {
set[i].transitionOut( $('#gallery'), 562 );
}
}
2.
for (i=0; i < set.length; i++) {
if (i != 0) {
function tempTransition() {
set[i].transitionOut( $('#gallery'), 562 );
}
setTimeout(tempTransition, 100);
} else {
set[i].transitionOut( $('#gallery'), 562 );
}
}
3.
for (i=0; i < set.length; i++) {
if (i != 0) {
setTimeout('function() { set[i].transitionOut($("#gallery"), 562) }', 100);
} else {
set[i].transitionOut( $('#gallery'), 562 );
}
}
transitionOut():
jQuery.fn.transitionOut = function(parent, height) {
this.animate({
height: '0',
top: height + 'px'
}, function() {
$(this).remove();
});
}
CMSのクロージャーの例を使用して動作させました。しかし、今、私は新しい問題に直面しています。トランジションは 2 番目のイメージでのみ発生します。3 つの画像がある場合、アニメーション画像 1、遅延、アニメーション画像 2、アニメーション画像 3 になります。2 と 3 の間に遅延はありません。
新しいコードは次のとおりです。
for (i=0; i < set.length; i++) {
(function(i) {
if (i != 0) {
function tempTransition() {
set[i].transitionOut( $('#gallery'), 562 );
}
setTimeout(tempTransition, 200);
} else {
set[i].transitionOut( $('#gallery'), 562 );
}
})(i);
}