Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 我如何让它在到达最后一张幻灯片时重新启动循环?_Jquery - Fatal编程技术网

Jquery 我如何让它在到达最后一张幻灯片时重新启动循环?

Jquery 我如何让它在到达最后一张幻灯片时重新启动循环?,jquery,Jquery,我将这些指示器链接到每一张幻灯片,但当我到达第11张幻灯片时,如果我继续在所有幻灯片中循环,它将停止。我需要它在12号后回到1号。有人能帮忙吗 for (var i = 1; i <= 12; i++) { if (jQuery('#slide-' + i).is(':visible')) { console.log('#slide-' + i); jQuery('#page_count-' + i).addClass('active'); } else {

我将这些指示器链接到每一张幻灯片,但当我到达第11张幻灯片时,如果我继续在所有幻灯片中循环,它将停止。我需要它在12号后回到1号。有人能帮忙吗

for (var i = 1; i <= 12; i++) {
    if (jQuery('#slide-' + i).is(':visible')) {
    console.log('#slide-' + i);
    jQuery('#page_count-' + i).addClass('active');
} else {
    jQuery('#page_count-' + i).removeClass('active');
   };
};
(变量i=1;i)的

编辑:就像TrueBlueAusie建议的那样,删除了循环解决方案

编辑2:愚蠢的逻辑错误,修复,再次感谢TrueBlueAusie。 这将快速运行前12个呼叫,然后延迟5秒,然后重试
重新启动。

就我个人而言,我会为此使用递归函数,而不是循环

var current_slide = 1;
var number_of_slides = 3;
var time_between_slides = 3000; // ms
var nextSlide = function() {

    // do your stuff that changes slides here

    if (current_slide < number_of_slides) {
        current_slide++;
    } else {
        current_slide = 1;
    }

    window.setTimeout(function() {
        nextSlide() // function calls its self, creating an "infinite loop"
    }, time_between_slides);
};
window.setTimeout(function() {
    nextSlide(); // initially call the function to go to the next slide
}, time_between_slides);
var-current\u-slide=1;
var编号\u的\u幻灯片=3;
两张幻灯片之间的var时间=3000;//ms
var nextSlide=函数(){
//在这里做些改变幻灯片的事情
if(当前幻灯片<幻灯片数量){
当前幻灯片++;
}否则{
当前滑动=1;
}
setTimeout(函数(){
nextSlide()//函数调用其自身,创建一个“无限循环”
},幻灯片之间的时间);
};
setTimeout(函数(){
nextSlide();//首先调用函数以转到下一张幻灯片
},幻灯片之间的时间);

如果(i==12){i=1;},尝试将其更改为
。要知道,现在设置for循环的方式会导致无限循环,这可能会使javascript引擎过载并使浏览器无响应。看到这么多人只是复制他的错误。setTimeout/setInterval,people!+1因为提供了这两种代码并引起了一些争论:)是的,循环实际上是为了尽可能快地处理事情,而不是为了定时的视觉事件,我建议将来使用JSFIDLE来演示预期目标。为什么使用
setTimeout
递归,而不仅仅是使用
setInterval
?@Kippie-我使用setTimeout,因为在我再次调用函数自身之前,我可以让它检查幻灯片是否已进入“暂停模式”。@TrueBlueAussie fyi,它仍然是一个无限循环,但被延迟:)@xFortyFourx:它不是一个无限循环。。。它是一个事件驱动的回调,碰巧调用自己。。。巨大的区别:)@xFortyFourx实际上不是。该函数使用
setTimeout
对新调用进行排队,但会立即返回并将控制权返回给主javaScript线程。第二个答案更好,但看在上帝的份上,删除第一个答案(除了每秒更新类1000次之外,它什么也不做……实际上什么也不做):)谢谢大家的快速回复。。。。我会实施你的想法,看看我能得到什么。再次感谢您可以使用
i=(i-1)%12+1
获得相同的数字环绕。您是否打算在计时器回调中传递1或i?有些奇怪的事情发生了。现在我的页面无法加载。我想如果(i==12){i=1;},我会尝试添加这个
var current_slide = 1;
var number_of_slides = 3;
var time_between_slides = 3000; // ms
var nextSlide = function() {

    // do your stuff that changes slides here

    if (current_slide < number_of_slides) {
        current_slide++;
    } else {
        current_slide = 1;
    }

    window.setTimeout(function() {
        nextSlide() // function calls its self, creating an "infinite loop"
    }, time_between_slides);
};
window.setTimeout(function() {
    nextSlide(); // initially call the function to go to the next slide
}, time_between_slides);