JQuery问题中的图像替换

时间:2015-11-10 14:55:16

标签: javascript jquery

其实我要用jquery一个接一个地替换图像。我在jquery中有以下代码,但它总是将最后一个图像放在图像源中。

for(var i = 0;i<2;++i)
{
  $("#heatMapImage").attr("src","");
  $("#heatMapImage").fadeOut(1000, function() {
  $("#heatMapImage").attr("src",i + ".png");
  }).fadeIn(9000);

  if(i == 2)
    $("#heatMapImage").attr("src",i + ".png");
}

我的html代码如下。

<img id = "heatMapImage" src=""/>

当脚本运行时,它直接给我最后一个图像。检查元素中的html看起来像这样,

<img id= "heatMapImage" src="2.png"/>

请帮助。

2 个答案:

答案 0 :(得分:2)

我认为您的问题更多与javascript的异步性质有关。你在循环中运行fadeOut和fadeIn函数,但循环并不知道等待动画在它递增之前完成。

不应使用for循环,而应将fadeOut fadeIn代码移动到函数中,并以递归方式调用函数作为fadeIn的回调。

var i = 0;

function fadeImages(i){
  $("#heatMapImage").attr("src","");
  $("#heatMapImage").fadeOut(1000, function() {
  $("#heatMapImage").attr("src",i + ".png");
  }).fadeIn(9000, function() {          
      if (i < 2) fadeImages(i + 1);
  });
}

答案 1 :(得分:0)

在循环中使用回调并将变量传递给循环内部更新的变量。因此,当回调调用它时,更新的变量将使用所有回调的最后一个状态!有关更多信息,请参阅此主题:在javascript中使用循环内部的回调时,是否有任何方法可以保存在循环中更新的变量以用于回调?