2011-01-28 54 views
2

我创建了一个排序器,需要它运行,直到页面明显关闭或导航离开。创建一个基于Javascript的新闻自动收录器

这个脚本会刚刚经历里被循环(这是我这么远):

$("li").hide(); //hides all "li" onload 
var lis = $("ul").children("li").size(); //counts how many "li"s there are 
var count = 0; 
while(true) 
{ 
    count++; 
    if(count>lis) //checks if count needs to be reset 
    count = 1; 

    $("li:nth-child(" + count + ")").fadeIn('slow'); 
    setTimeout('', 4000); 
} 

显然,页面将不会因为无限循环的加载。有没有人有任何关于我应该如何去做的建议?

回答

2
var ticker = $('ul.ticker'); 
ticker.children(':first').show().siblings().hide(); 

setInterval(function() { 
    ticker.find(':visible').fadeOut(function() { 
     $(this).appendTo(ticker); 
     ticker.children(':first').show(); 
    }); 
},2000); 

demo

0

你应该让你的setTimeout指向每次想要触发的函数,并让该函数再次调用setTimeout。它实际上是无限轮询,但内置延迟。它还可以让你设置一个标志,如果你想打破(即不要再次调用setTimeout)。

+0

我应该如何让脚本无限运行?因为while(true)不能正常工作 – nkcmr 2011-01-28 04:22:11

+0

或者你可以使用setInterval来连续调用'next元素'。 – rcravens 2011-01-28 04:22:18

+0

这就是我要说的。 setTimeout使用一个函数作为它的第一个参数。如果你有这个函数做你的循环内的逻辑(而不是循环),你只需要保持setTimeout永远重置。 setInterval(如rcravens所说)是另一种方法,但在大多数情况下,我发现setTimeout更可靠,因此您不必担心在再次调用函数之前代码是否完成。 – Paul 2011-01-28 04:28:35

0

还有别的东西就像一个jQuery插件(jQuery webTicker),做所有的工作适合你。例如,你可以做一个无序列表

<ul id='webticker'> 
    <li>text</li> 
</ul> 

使用jQuery在它

jQuery('#webticker').webTicker(); 

顶部,这将自动启动旋转脚本,你还需要其沿着插件提供了一些额外的CSS本身可以修改的造型。脚本包括,当鼠标在webticker,而你可以在淡入和淡出效果在webticker example解释下载网站

0

上要添加到Reigel的辉煌答案的顶部自动停止功能,

var ticker = $('ul.ticker'); 
ticker.children(':first').show().siblings().hide(); 

setInterval(function() { 
ticker.find(':visible').fadeOut(function() { 
    $(this).appendTo(ticker); 

    // fadeIn() rather than show() here to create a continuously fading effect. 

    ticker.children(':first').fadeIn(); 
}); 
},2000);