現在持っているコンテンツを表示するために JSON ページをロードする方法を見つけようとしています。しかし、私は各要素を次々とフェードインしようとしていますか? 誰かがそれを行う方法に精通していますか?
少し遅れて各要素をフェードインしますか?
これが私のコードの例です。jquery フレームワークを使用しています。
現在持っているコンテンツを表示するために JSON ページをロードする方法を見つけようとしています。しかし、私は各要素を次々とフェードインしようとしていますか? 誰かがそれを行う方法に精通していますか?
少し遅れて各要素をフェードインしますか?
これが私のコードの例です。jquery フレームワークを使用しています。
スパン要素の配列があるとしましょう:
$("span").each(function(index) {
$(this).delay(400*index).fadeIn(300);
});
(クイックノート:.delayメソッドを使用するにはjQuery 1.4以降が必要だと思います)
これは基本的に、設定された時間待機し、各要素をフェードインします。これは、待機時間を要素のインデックスで乗算しているために機能します。配列を反復処理する場合、遅延は次のようになります。
これにより、「次々に」フェードイン効果が得られます。また、slideDownで使用することもできます。お役に立てれば!
さて、フェード機能をセットアップして、「次の」機能をトリガーすることができます。
$("div#foo").fadeIn("fast",function(){
$("div#bar").fadeIn("fast", function(){
// etc.
});
});
しかし、タイマーはより良いシステムかもしれませんし、それらをすべて取得して配列に入れ、間に遅延を置いて一度に 1 つずつポップオフし、一度に 1 つずつフェードインする関数かもしれません。
これはどう?
jQuery.fn.fadeDelay = function() {
delay = 0;
return this.each(function() {
$(this).delay(delay).fadeIn(350);
delay += 50;
});
};
次のようなものが必要になると思います。
var elementArray = yourAjaxRequestReturningSomethingEdibleByJQuery();
fadeInNextElement(elementArray);
function fadeInNextElement(elementArray)
{
if (elementArray.length > 0)
{
var element = elementArray.pop();
$(element).fadeIn('normal', function()
{
fadeInNextElement(elementArray);
}
}
}
注意: 私はそれをテストしていませんが、動作しない場合でも、アイデアを得て簡単に修正する必要があります。
ところで、私はタイマーを使うことに同意しません。タイマーを使用すると、要素が次々とフェードインするという保証はなく、1 つの要素のフェードインは、前の要素が終了した場合にのみ開始されます。
理論的には動作するはずですが、何らかの理由で「チェーン」を停止する必要がある場合や、フェード アニメーションが時間どおりに終了しない場合などがあります。適切なチェーンを使用してください。
setTimeout() (標準の JS 関数) を使用した jQuery fadeIn()を確認してください。このサイトhttp://www.realstorage.ca/で私が行ったことをチェックアウトできます。私は基本的にそれらを非表示にして表示するので、ループに入ることができます。