0

我有一个带有 4 张图片的幻灯片,其中有一个分页,现在我希望它们在循环中一张一张地显示,对于循环我有这个代码:

  function myfn(interaltime) {
  setTimeout('$("#picgallery_pagging li:eq(0)").trigger("click")', 0);
  setTimeout('$("#picgallery_pagging li:eq(1)").trigger("click")', interaltime);
  setTimeout('$("#picgallery_pagging li:eq(2)").trigger("click")', interaltime*2);
  setTimeout('$("#picgallery_pagging li:eq(3)").trigger("click")', interaltime*3);
  setTimeout('myfn('+interaltime+')',interaltime*4);
  };
  myfn(3000);  

我的问题:它不能正常工作,只运行一次,并且 interaltime 变量在第二轮为空

分页中的每个按钮都运行我的自定义功能效果以显示图片,正如您所见,我必须在分页上的每个按钮上触发点击功能。(我不知道如何在 jquery 中使用我自己的功能延迟)

注意:我在控制台日志中检查了间隔时间变量,它在第二回合是空的!但我不知道如何解决它!
编辑:我使用了 setInterval 但 intercaltime 变量在第二个 ture 中仍然是空的

4

3 回答 3

2

您正在将字符串传递给setTimeout- 这不是最佳实践,并且可能完全不可靠。

试试这个,而不是:

function autoclick($el, delay) {
    var i = 0, n = $el.length;
    (function loop() {
        $el.eq(i).trigger('click');    // do your thang
        i = (i + 1) % n;               // increment and reset (if required)
        setTimeout(loop, delay);       // loop "recursively"
    })();                              // invoke immediately
}

autoclick($('#picgallery_pagging li'), 1000);

它消除了代码中的重复,并安排为每个单个元素一遍又一遍地调用自己,而不是整个批次的四个。

调用并不是真正的递归,即使它看起来很像,因为它实际上是浏览器的事件循环负责一遍又一遍地调度函数调用。

演示在http://jsfiddle.net/alnitak/PfmVt/

于 2013-04-25T18:14:23.377 回答
0

选项之一是这样的:

function myfn(interaltime) {
    function wrapper(){
        do_stuff();
        setTimeout(wrapper, interaltime);
    }
    setTimeout(wrapper, 0);
} 

您基本上是在设置超时以一次又一次地运行相同的功能。这是一个非常简化的示例,甚至没有尝试提供取消循环的方法。另外,请注意,这绝不是递归调用,因此您不会遇到 stackoverflow 问题。

更简单的选择是使用 setInterval:

function myfn(interaltime) {
    return setInterval(do_stuff, intervaltime);
}

这样你就可以取消循环,比如

var loop = myfn(100);
//somewhere later
clearInterval(loop);
于 2013-04-25T18:14:39.767 回答
0

尝试:

  setTimeout(function() {
                $("#picgallery_pagging li:eq(0)").trigger("click");
             }, 0);

代替

  setTimeout('$("#picgallery_pagging li:eq(0)").trigger("click")', 0);

并对所有其他 setTimeouts 重复此操作。本质上,对 setTimeout 使用匿名函数

于 2013-04-25T18:17:26.403 回答