使用jQuery,我已经构建了一个图像/幻灯片旋转器。在基本设置(在伪代码):停止执行递归JavaScript函数
function setupUpSlide(SlideToStartWith){
var thisSlide = SlideToStartWith;
...set things up...
fadeInSlide(thisSlide)
}
function fadeInSlide(thisSlide){
...fade in this slide...
fadeOutSlide(thisSlide)
}
function fadeOutSlide(thisSlide){
...fade out this slide...
thisSlide.fadeOut(fade, function() {
var timeout2 = setTimeout(setupUpSlide(nextSlide),100);
}
我所说的第一个功能,并通过在特定的幻灯片索引,然后它的功能,它的事调用链,然后又再次调用第一功能传入下一个索引。然后这会无限重复(当它到达最后一个项目时重置索引)。
这工作得很好。
我现在想要做的是让某人能够通过点击某个特定的幻灯片号码来替代幻灯片。因此,如果幻灯片#8显示,并且我单击#3,我希望递归停止,然后调用传递到幻灯片#3中的初始函数,然后再次启动该过程。
但我不知道该怎么做。如何恰当地“打破”递归脚本。我是否应该创建某种全局的'watch'变量,如果在任何时候'true'都会返回:false并允许执行新的函数?
更新:增加了更详细的代码显示setTimeout调用
但是,在某些时候,我不需要递归来继续循环吗?也就是说,如果我有6张幻灯片,我需要从1到6,然后重复。使用上述超时方法,如何合并for循环逻辑来增加呼叫? – 2010-04-26 20:30:31
@DA:使用超时可以创建一个无限循环而不会发生堆栈溢出。每个呼叫代表您的循环中的一个步骤。 – 2010-04-26 20:39:51
ack。应该看看我已经接近。原来我们在最后一个函数中使用setTimeout函数(然后调用第一个函数)。我已更新原始帖子中的示例代码。所有这些都是为了避免堆栈溢出问题吗? – 2010-04-26 20:56:31