Prefazione: ho un demo of the problem sul mio sito personale (spero che sia ok, altrimenti posso provare a configurarlo su jsfiddle). Sto pensando che questa domanda sia un po 'divertente, mentre cerco anche di capire le funzioni del tempo in javascript.Come posso far funzionare le mie funzioni setTimout alla stessa velocità?
Sto incrementando il valore delle barre di avanzamento su un timeout. Idealmente (se le funzioni funzionano istantaneamente) dovrebbero riempire alla stessa velocità, ma nel mondo reale non lo fanno. Il codice è questo:
function setProgress(bar, myPer) {
bar.progressbar({ value: myPer })
.children('.ui-progressbar-value')
.html(myPer.toPrecision(3) + '%')
.attr('align', 'center');
myPer++;
if(myPer == 100) { myPer = 0; }
}
function moveProgress(bar, myPer, inc, delay){
setProgress(bar, myPer);
if(myPer >= 100) { myPer = 0; }
setTimeout(function() { moveProgress(bar, myPer+inc, inc, delay); }, delay);
}
$(function() {
moveProgress($(".progressBar#bar1"), 0, 1, 500);
moveProgress($(".progressBar#bar2"), 0, 1, 500);
moveProgress($(".progressBar#bar3"), 0, .1, 50);
moveProgress($(".progressBar#bar4"), 0, .01, 5);
});
Ingenuamente, si potrebbe pensare dovrebbe tutti corrono (riempire la barra di avanzamento) alla stessa velocità.
Tuttavia, nelle prime due barre, (se si chiama "impostazione della barra di avanzamento" una singola operazione), eseguo un'operazione ogni 500 ms per un totale di 500 operazioni per riempire la barra; nel terzo, eseguo un'operazione ogni 50ms per un totale di 5.000 operazioni per riempire la barra; nel quarto, eseguo un'operazione ogni 5ms per un totale di 50.000 operazioni per riempire la barra.
Quale parte del mio codice impiega più tempo, causa queste differenze di velocità e potrebbe essere modificata per far sì che sembrino funzionare nel modo in cui lo fanno (la quarta barra ottiene incrementi più piccoli), ma anche a la stessa velocità?
Se si guarda bene, le etichette sono spente sul sito di esempio. Non è il 4 ° bar .01 ogni 5ms? –
@JamesMontagne whoops. Grazie. Fisso. – xdumaine
nota che il ritardo di una chiamata 'setTimeout' può essere bloccato su un valore minimo; 4ms per i browser html5 (e Chrome) ma dipende dal browser. cioè può bloccarlo ad un valore maggiore come 10ms. –