2012-06-21 116 views
1

我有一些从包含html块的ajax调用返回的html。我想淡出现有的块并淡入新的块,以便它按顺序发生(每次1个)。现在它全部在同一时间发生。如何逐个淡入淡出元素?

回调看起来,$ .each函数继续通过剩余的html块,所以它们都会同时淡入和淡出。有没有办法做到这一点,每个HTML块都淡入淡出之前,移动到下一个?

代码

var $newestResults = $('#newest .pcVideomaincontainer:lt(' + data.d.Newest.ChannelsReturned + ')'); 
      $newestResults.fadeOut('slow'), function() { remove() }; 
      $.each($newestResults, function (index, value) { 
       $(this).animate({ 
        opacity: 0 
       }, 1000, 
       function() { 
        $(this).remove(); 
        $('#pcContentHolder_newest').prepend(data.d.MostFamous.HtmlChannelSegments[index]).hide().fadeIn('slow'); 
       }); 
      }); 

回答

3

添加基于当前指数的延迟。

 $.each($newestResults, function (index, value) { 
      $(this).delay(index*1000).animate({ 
       opacity: 0 
      }, 1000, 
      function() { 
       $(this).remove(); 
       $('#pcContentHolder_newest').prepend(data.d.MostFamous.HtmlChannelSegments[index]).hide().fadeIn('slow'); 
      }); 
     }); 

我没有测试过,但淡入也应该被推迟,因为它是在已经延迟第一动画的方法的回调。

+0

这是完美的,谢谢! – chobo

0

你可以在你的函数周围用一个类似的延迟超时?

window.setTimeout(your_function,1000)