2013-11-22 82 views
0

当我使用jQuery进行循环时,我真的很困惑如何传递值并重新开始。什么是循环定时jQuery函数的最佳实践

我的项目是一个“简单”的证明旋转器。

<div id="testimonials"> 
    <div class="testimonial"> 
     <p>You're great!</p> 
    </div> 
    <div class="testimonial"> 
     <p>Thanks a lot!</p> 
    </div> 
    <div class="testimonial"> 
     <p>Rock on!</p> 
    </div> 
</div> 
<script> 
    jQuery(function ($) { 
     $(document).ready(function() { 
      function fade() { 
       $('.testimonial').hide(); 
       var t = $('.testimonial').length; 
       alert(t); 
       for(var i = 1; i <= t; i++){ 
        function slideit(){ 
         var i = i; 
         $('.testimonial.nth-child(' + i + ')').show('slow'); 
         $('.testimonial.nth-child(' + i + ')').hide('slow').delay(2000); 
        } 
        slideit(); 
       } 
      } 
      fade(); 
     }); 
    }); 
</script> 

现在,我卡住了。指针克服驼峰?

+0

'$( 'testimonial.nth孩子[' + I +“] ')'应该是'$('。见证:nth-​​child('+ i +')') – Shikiryu

+0

谢谢@Shikiryu。完成了! – mike

+0

请注意,如果您只是寻找一个优雅的jQuery脚本来解决此功能,请参阅http://stackoverflow.com/a/8616480/497438 – mike

回答

1

最好的办法是使用setInterval()

var i = 0, // index of element to show 
    t = $('.testimonial'), // elements 
    max = t.length; // max elements 
function fade() { 
    t.eq(i).show('slow'); // we show current element 
    t.not(':eq('+i+')').hide('slow'); // we hide others 
    if(++i >= max) i=0; // we increment index and if we go over max, we reset index 
} 
window.setInterval(fade,3000); // we call fade every 3 seconds 

http://jsfiddle.net/zf5Wb/

+0

啊。现在,我们正在使用JavaScript。我经常依靠jQuery来为我做我的想法,忘记了javascript可能更简单。谢谢! – mike

0

正如Shikiryu建议。

变化从

$('.testimonial.nth-child[' + i + ']')
代码
$('.testimonial:nth-child(' + i + ')')

+0

完成...现在的逻辑。 – mike

+0

哪些答案您发现有用答案答案或如果您自己找到解决方案请发布您的答案。这有助于人们立即找到答案:) –

+0

我只是让它呼吸了一下。当人们不检查解决方案时,我也很恼火。 – mike