我知道关闭,IIFE。
我已经阅读了其他答案(他们都指向使用IIFE)
那为什么这不起作用?
var imgFade = document.getElementById('img-fade');
for(i = 0; i < 100; i++){
(function(step) {
setTimeout(function() {
imgFade.style.opacity = (step/100);
}, 20);
})(i);
}
这是代码:https://jsfiddle.net/warkentien2/Lh10phuv/1/
编辑:面向未来的读者
考虑从i = 1; to 1 <= 100, i++
转换的所有答案,以便它不会停止以99%
答案 0 :(得分:4)
快速但又脏的方法是将20
乘以step
。您可以一次创建所有超时,因此应该在以后执行的超时具有更高的延迟:
var imgFade = document.getElementById('img-fade');
for(i = 0; i < 100; i++){
(function(step) {
setTimeout(function() {
imgFade.style.opacity = (step/100);
}, step * 20);
})(i);
}
答案 1 :(得分:2)
这是另一个解决方案,一个接一个地应用淡入淡出:
var fade = function(step){
imgFade.style.opacity = (step/100);
if(step < 100){
setTimeout(function(){ fade(++step); }, 20);
}
};
fade(0);