Ich kenne Schließungen, IIFE.
Ich habe die anderen Antworten gelesen (sie alle verweisen auf die Verwendung von IIFE).
Warum funktioniert das nicht? https://jsfiddle.net/warkentien2/Lh10phuv/1/JavaScript: setTimeout nicht aktualisieren Wert innerhalb der Schleife
var imgFade = document.getElementById('img-fade');
for(i = 0; i < 100; i++){
(function(step) {
setTimeout(function() {
imgFade.style.opacity = (step/100);
}, 20);
})(i);
}
hier ist der Code
- mein Bild sollte
EDIT: für zukünftige Leser
betrachten alle Antworten voni = 1; to 1 <= 100, i++
Übergang so wird es nicht
Sie Nun, Setzen Sie eine ganze Reihe von Timeouts praktisch gleichzeitig, um sie 20 ms später auszuführen; sie werden alle extrem schnell nacheinander feuern. Sie müssen das Timing ein bisschen verteilen, damit es * graduell * ist. – deceze
@deceze das ist nicht das Problem, oder eine einfache extra 0 auf dem setTimeout hätte es behoben. – warkentien2
@ warkentien2 Ich denke, es ist das Problem, denn zwischen dem ersten 'setTimeout' und dem letzten gibt es buchstäblich Nanosekunden. Alles, was du sehen wirst, ist also der letzte. 'setInterval' ist wahrscheinlich das, was Sie brauchen. – 4castle