所以我编写了一个函数,其目的是将图像从0不透明度淡化为1.这意味着每100毫秒将不透明度增加0.1,总持续时间为1秒。该函数将调用,它将增加不透明度,但它似乎只是等待100毫秒并将不透明度设置为1。我出错的任何想法?以下是与功能相关的代码片段和应该淡入的图像。我感谢任何输入=)
Javascript:
function setOpacity(id, num) {
document.getElementById(id).style.opacity = num;
}
function imagePopUp(id){
var step = 0.0;
for(var i = 1; i <= 10; i++){
step = i / 10;
var num = step.toFixed(1);
setTimeout(function(){setOpacity(id, num);}, 100);
}
}
HTML:
<div id ="shadowWrapper">
<div id ="imageContainer">
<img class ="sideImages" src ="images/mini_race1.jpg" onclick ="imagePopUp('image1')"></img>
<img class ="sideImages" src ="images/mini_race2.jpg" onclick ="imagePopUp('image2')"></img>
<img class ="sideImages" src ="images/mini_race3.jpg" onclick ="imagePopUp('image3')"></img>
</div>
<img class ="hiddenImages" id ="image1" src ="images/race_around_ireland_01.jpg"></img>
<img class ="hiddenImages" id ="image2" src ="images/race_around_ireland_02.jpg"></img>
<img class ="hiddenImages" id ="image3" src ="images/race_around_ireland_03.jpg"></img>
</div>
CSS:
#imageContainer {
position: absolute;
margin-top: 10px;
width: 200px;
height: 450px;
left: 600px;
}
.sideImages {
display: block;
width: 150px;
height: 112px;
border: 1px #94b62d solid;
margin-top: 20px;
margin-left: auto;
margin-right: auto;
}
.hiddenImages {
display: block;
position: absolute;
border: 1px black solid;
left: 100px;
opacity: 0.0;
}
答案 0 :(得分:3)
您正在排队所有回调,从现在开始执行100毫秒。 setInterval
没有“堆叠”或“排队”功能。
此外,在您正在创建的闭包中捕获相同的num
变量,并且在每次回调中执行时它将具有其最终值。
两个问题的解决方法是替换
setTimeout(function(){setOpacity(id, num);}, 100);
与
setTimeout(function(inum) {
return function(){setOpacity(id, inum);};
}(num), i * 100);