循环函数(Javascript回调帮助)
我没有对Javascript函数做太多的工作,我正在尝试让一个函数在短时间延迟后自行循环。我似乎有一些使用setTimeout()的代码,但我似乎不知道如何让它在我的实例中工作,以下是我的代码:循环函数(Javascript回调帮助),javascript,jquery,function,callback,Javascript,Jquery,Function,Callback,我没有对Javascript函数做太多的工作,我正在尝试让一个函数在短时间延迟后自行循环。我似乎有一些使用setTimeout()的代码,但我似乎不知道如何让它在我的实例中工作,以下是我的代码: var number = 8; var iter = 1; function slide_function(iter, amount, callback){ if(iter<amount){ console.log('test'); $('#ta
var number = 8;
var iter = 1;
function slide_function(iter, amount, callback){
if(iter<amount){
console.log('test');
$('#tagline_slideshow span#' + iter).delay(delayTime).fadeOut(1600, function(){
$(this).next('span').fadeIn();
});
var iter = iter + 1;
}
else if(iter==amount){
console.log('test2');
var iter = 1;
$('#tagline_slideshow span#' + iter).delay(delayTime).fadeOut(1600, function(){
$(this).next('span').fadeIn();
});
var iter = iter + 1;
}
}
slide_function(iter, number, setTimeout(slide_function(iter, number),5000));
var数=8;
var-iter=1;
函数slide_函数(iter,amount,callback){
如果(iter这可能对您有效,请在末尾添加此项,替换最后一行:
setInterval(function(){
slide_function(iter,number)
},5000);
并删除slide_函数中的回调参数
编辑:查看下面John T的评论Sirikon的答案有效,另一种方法是从幻灯片功能
中链接调用,此外,此代码避免全局调用。未经测试,因此可能存在一些错误
function slideShow(iter, amout) {
function slide_function(){
// Using mod operations is the common way to handle looping around the end
iter = iter % amount;
$('#tagline_slideshow span#' + iter).delay(delayTime).fadeOut(1600, function(){
$(this).next('span').fadeIn();
});
// You were using var, so you were creating a new variable instead
// of modifying the shared variable
iter++;
}
setTimeout(slideShow, 5000);
}
slideShow(0,8);
我建议您在fadeIn完成后设置Timeout。否则,如果您的延迟比fadeIn短,您将遇到同时尝试fadeIn和fadeout的问题
尝试重新排列代码,使其如下所示:
// starts at 1, ends at 8
slide_function(1, 8);
function slide_function(iter, amount) {
// defines a function called runAgain inside slide_function()
var runAgain = function() {
// setTimeout takes in a function as the first parameter and delay as the second one
setTimeout(function() {
// inside the function, run slide function with an incremented iter
slide_function(iter+1, amount);
}, 5000);
}
if(iter<amount){
console.log('test');
$('#tagline_slideshow span#' + iter).delay(delayTime).fadeOut(1600, function(){
$(this).next('span').fadeIn(runAgain);
});
}
else if(iter==amount){
console.log('reached the limit, resetting iter to 1');
iter = 1;
$('#tagline_slideshow span#' + iter).delay(delayTime).fadeOut(1600, function(){
$(this).next('span').fadeIn(runAgain);
});
}
}
//从1开始,到8结束
滑动_功能(1,8);
功能幻灯片功能(iter,金额){
//在slide_function()中定义一个名为runreach的函数
var runreach=function(){
//setTimeout将函数作为第一个参数,将延迟作为第二个参数
setTimeout(函数(){
//在函数内部,使用递增的iter运行slide函数
幻灯片功能(iter+1,数量);
}, 5000);
}
如果(iterslide\u function
从未调用callback?同时,您将超时id传递给slide\u function
,而不是一个函数,也就是说,setTimeout
不返回函数。如果他采用这种方法,他还需要去掉slide\u function()中的“var iter”。否则,setInterval范围内的iter将始终为1