2011-11-03 91 views
3

使动画运行我有运行如何在一个无限循环

MyTry

我想要做的是使动画的无限循环怎么办去当前的代码?

我想再次调用同一个函数或我不知道

刚结束时的最后一个元素

(function($) { 
$.fn.fade = function() { 
     return this.each(function(index, item) { 
      var $this = $(this).siblings(); 
      $(item).hide().stop(); 
      if ($(item).index() == $(this).siblings().length - 1) { 
       $(item).delay(5000 * index).fadeIn('slow').delay(3500).fadeOut('slow', function() { 
        /* here is the last element finishing */ 
       }); 

      } else { 
       $(item).delay(5000 * index).fadeIn('slow').delay(3500).fadeOut('slow'); 

      } 
     }); 
    }; 

})(jQuery); 
$('.tst').fade(); 

编辑动画又来了什么,又说:我离开了动画运行来到检查答案 让我看到了一个奇怪的现象

如何解决以及

+2

使用英文大写字母,在句子的开始。 –

回答

2

尝试this(但你必须把它擅长于你的插件结构):

var elements = $('ul > li'); 
(function fade(idx) { 
    $(elements).eq(idx || 0).fadeIn(1500).fadeOut(1500, function() { 
    fade(idx < elements.length - 1 ? idx + 1 : 0); 
    }); 
}()); 
+0

thx非常非常糊涂这正是解决方案 – Qchmqs

+0

这个解决方案是否存在堆栈问题?我并不认为JavaScript是这样优化函数调用的聪明之处,但它会很棒,如果它是... –

+0

@Weston C:'fade'不直接调用它自己,所以堆栈没有增长。当执行'fade()'时,它可以在执行jQuery函数后退出,因为它还没有调用回调函数。 – pimvdb

5

最strai ght-forward的方式是给函数一个名字并重新调用它:http://jsfiddle.net/pimvdb/SxTgy/4/

$.fn.fade = function x() { 
     var _this = this; // keep the 'this' value 

最终的动画后,再次拨打x,传递this值它有:

x.call(_this); // same as x() but it sets the 'this' value inside it correctly 

注意,这种“命名的函数表达式”对IE8-一定的怪癖。

+0

每个浏览器的怪癖尝试将时间减少1/10,看看它会如何做 – Qchmqs

+0

http://jsfiddle.net/Qchmqs/YH96n/ – Qchmqs

+0

@Qchmqs:你正在设置衰落一次。为#1生成动画可能是一个更好的主意,然后当它完成时开始动画#2等(递归的种类)。那么你确定第二个是在第一个之后开始的。 – pimvdb