Sto essenzialmente cercando di scorrere una collezione di tag LI e inserire del testo per simulare l'aspetto di qualcuno che scrive un elenco di cose da fare. Funziona, ma scrive contemporaneamente ciascuno degli elementi dell'elenco invece di attendere. C'è un modo semplice per raggiungere questo obiettivo? Ho una configurazione JS Fiddle qui: http://jsfiddle.net/fZpzT/ ma il codice è simile a questo. Grazie.jquery .each aspettando che la funzione termini prima di continuare con il ciclo
function addListItems() {
var str = {
listitem1:'personal background check',
listitem2:'look into my sketchy neighbor',
listitem3:'look up my driving record',
listitem4:'pick up milk',
listitem5:'wash the car'
}
$('.list-container li').each(function(){
var z = $(this).attr('id');
var str2 = str[z];
var delay = 0;
for (var i = 0; i <= str2.length; i++) {
(function(str2){
delay += 100 + Math.floor(Math.random()*11)*6;
setTimeout(function(){
appendStr(str2);
},delay);
})(str2[i])
}
function appendStr(str2) {
$('#'+ z).append(str2);
}
});
}
+1 per una domanda ben scritto e con l'esempio jsfiddle. Non sono sicuro di quale sia la * soluzione * per questo, ma sono abbastanza sicuro che il problema sia ** non ** '.each()', ma piuttosto il tuo uso di 'setTimeout()'. 'setTimeout()' sta eseguendo in modo asincrono, il che significa che l'intero ciclo termina in modo iterativo (non simultaneamente), ma termina * molto velocemente *, e quindi i gestori delle funzioni 'setTimeout' funzionano * dopo * il ciclo è terminato. – Snixtor
Vorrei vedere [qui] (http://api.jquery.com/category/deferred-object/) per alcune idee su come concatenare queste funzioni usando 'differito'. – Aesthete
Sono d'accordo con la spiegazione di Snixtor e aggiungerei che dovresti probabilmente moltiplicare il valore del delay in base a quale elemento della lista sei (potresti usare 'each (function (index) {...' per ottenere l'indice). ritardo necessario per il primo elemento, ma si potrebbe ritardare il secondo elemento di 1 secondo, il 3 ° di 2 secondi, ecc., che darebbe l'effetto di una voce di elenco aggiunta al secondo –