jQuery:使用.each循环列表

jQuery:使用.each循环列表,jquery,html-lists,Jquery,Html Lists,我有一个非常简单的列表,其中包含我需要循环的图像。以下是脚本: var graphic = $('#banner li'); graphic.hide(); cycle = $(graphic).each(function(i,e) { while(i-- >= 0){ $(e).show(300).delay(2000).hide(300) } if(i===0){cycle()} }) 它几乎起作用了。。它显

我有一个非常简单的列表,其中包含我需要循环的图像。以下是脚本:

var graphic = $('#banner li');
  graphic.hide();
    cycle = $(graphic).each(function(i,e) {
      while(i-- >= 0){
        $(e).show(300).delay(2000).hide(300)
      }
      if(i===0){cycle()}
    })  
它几乎起作用了。。它显示所有图像,而不是一次显示一个,但在浏览列表时删除每个图像。我可以使用溢出:隐藏在我的CSS中,但我不希望这样。当它达到0时,它也不会重复

请帮忙。对于这样一个简单的任务,我也不想要臃肿的循环插件。谢谢

**我试着将
图形
制作成一个数组,但我也无法让它工作


使用以下方法稍微重构您的逻辑:

通过将IIFE本身作为回调传递,我们可以在当前迭代的
.hide()
动画完成后,为下一项重复显示、延迟和隐藏循环

您可以在函数末尾递增<代码> i>代码,并在输入IIFE之前调用<代码>图形.HIDEE()/<代码>,一些人可能认为更可读:

var graphic = $('#banner li'),
    i = 0,
    l = graphic.length;
graphic.hide();
(function cycle() {
    graphic.eq(i % l).show(300).delay(2000).hide(300, cycle);
    i++;
}());

上面的内容只是为了便于阅读,它与第一个代码片段具有相同的效果。

cycle()
没有多大意义,它是一个对象而不是一个函数……我只是试图引用该函数。原始脚本被包装在
animateBanner()
中。我无法引用
cycle()
?在旁注中,您不需要
$(图形)
-
graphic
已经是jQuery对象;只需使用
图形。每个(…
。老实说,我不明白你的代码在做什么。检查重构版本是否有助于尝试-它并不完美,但一次只显示一个图像,并在最后回忆自己。
var graphic = $('#banner li'),
    i = 0,
    l = graphic.length;
graphic.hide();
(function cycle() {
    graphic.eq(i % l).show(300).delay(2000).hide(300, cycle);
    i++;
}());