2017-03-03 11 views
0

jqueryを使用してdivに配列を追加していますが、このときに小さなローディングインジケータを表示したいので、コールバック関数を追加ロジックにスローしました。しかし、私の配列がdivに描画される前に、私のローダーはそれを消して.hide()になります。append()関数の間に発生する遅延を処理する方法は?

のみの配列が絵を完了した後に.hide()を実行することができる方法私はありますか?ここで

var contentpush = []; 
// create x-amount of divs (x being 'tabs') 
for (var i = 0; i < tabs; i++){ 
    contentpush.push('<li class="tab" role="tab"><a href="#tab'+(i+1)+'"><span class="icon"><span class="'+contentformat[i].icon+'" ></span></span><span class="title">'+contentformat[i].title+'</span></a></li>'); 
} 

$('.tablist').append(contentpush.join('')).ready(function(){$('#skeleton').hide(); });; 

も同様に何が起こっているのGIFです: Slow Arrays

あなたが見ることができるように私の配列は、実際のdivに塗装される前に、骨格フレームローダは長く消えます。これに関する考えは大いにありがたいです!

+0

あなたはコードをフィドルまたはコードペンに入れることができますか?それは私のロジックの一部を処理するために、これらのCMSモジュールを使用していますが、コードが付属するアペンド機能 –

+0

は、あなたの代わりにloadイベントを試してみましたjqueryからの準備ができていますか? –

+0

を扱う一部でしかありませんので、正確に、全体のWebアプリは、企業のCMSで構築されていない – mnemosdev

答えて

0

タイムアウトを数ミリ秒間設定しようとしましたか?

+0

ロード時間はブラウザ/コンピュータによって異なります。実行時間を静的に設定する必要はありません。しかし、私が自動的にそれを処理する答えを見つけることができない場合、これは私の解決策かもしれません。 :/ –

0

残念ながら、jQueryの.append()機能は、コールバックが含まれていません。おそらくすぐに起こると思われるので、実際に完了を確認する方法はありません。タイムアウトまたは間隔を使用して非同期であることを明示的に指示しない限り、それらが来る順序で同期的に実行されます。 see this

これは、.appendメソッドが実行され、そのメソッドがそのジョブを終了するまで実行されないことを意味します。次のように試してください

// set a time interval for the event to complete. 
$(contentpush).hide().appendTo(".tablist").fadeIn(1000); 

// a small tweak to set a call back function. 
$(".tablist").append(contentpush).append(function() { $('#skeleton').hide(); }); 
+0

私が気づいたことは、読み込み中にulに値が入ることです。それはただ私を殺しているレンダリング時間です。 'skeleton' divを削除する前に' tabs'要素をチェックすると、load /すぐにそれを行います。しかし、一旦lisが実際にペイントされ/レンダリングされると、それを伝える方法はないようです。 –

関連する問題