2017-03-03 3 views
0

Ich angehängt ein Array zu einem Div mit jquery, ich möchte eine kleine Ladeanzeige zeigen, während dies geschieht, so warf ich eine Rückruffunktion auf meine Append-Logik. Das funktioniert, aber mein Loader wird es auslöschen bevor mein Array in das Div.Wie behandelt man die Verzögerung zwischen einer append() - Funktion?

Gibt es eine Möglichkeit, dass ich nur die ausführen kann, nachdem das Array fertig gemalt hat?

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(); });; 

ist hier ein gif, was auch geschieht: Slow Arrays

Wie Sie das Skelett loader lange verschwinden sehen können, bevor meine Array tatsächlich in die div gemalt. Irgendwelche Gedanken dazu werden sehr geschätzt!

+0

können Sie Code in Geige oder Codepen setzen? –

+0

Nicht genau, die gesamte Web-App ist auf einem Unternehmen cms gebaut, so dass es diese Cms-Module verwendet, um einige meiner Logik zu behandeln, aber der enthaltene Code ist der einzige Teil, der die Append-Funktion behandelt –

+0

haben Sie das Load-Ereignis statt versucht der fertige von jquery? – mnemosdev

Antwort

0

Haben Sie versucht, eine Zeitüberschreitung für einige Millisekunden festzulegen?

+0

Die Ladezeiten variieren je nach Browser/Computer, ich möchte keine statische Zeit für die Ausführung angeben, nur für den Fall, dass es eine schnellere oder kürzere Ladezeit woanders gibt. Aber wenn ich keine Antwort finden kann, die es automatisch behandelt, kann dies meine Lösung sein. :/ –

0

Leider enthält die Funktion jQuery .append() keinen Rückruf. Es gibt keine Möglichkeit, wirklich auf Vollständigkeit zu prüfen, wie es angeblich sofort passiert. synchron in der Reihenfolge, in der sie kommen, es sei denn, Sie sagen ihnen explizit, dass sie asynchron sind, indem Sie ein Timeout oder ein Intervall verwenden. see this

Dies bedeutet, dass Ihre .append-Methode ausgeführt wird und nichts anderes ausgeführt wird, bis diese Methode ihre Arbeit beendet hat. versuchen Sie folgendes

// 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

Also, was ich bemerkte, ist, dass bei Belastung, die ul wird besiedelt werden, ist es nur die Renderzeit, die mich tötet. Wenn ich nach dem Element 'tabs' suche, bevor ich das' skeleton' div entferne, wird es beim Laden/sofort ausgeführt. Aber es scheint, dass es keine Möglichkeit gibt zu sagen, wann die Lis tatsächlich auf der Seite gemalt/gerendert werden. –

Verwandte Themen