运行setInterval一次然后停止

时间:2011-12-02 23:20:59

标签: javascript jquery

我目前正在将一个“活动”类应用于一组列表项。你可以在这里看到小提琴:

http://jsfiddle.net/y9h5q/906/

编辑:这是HTML:

<div id="slider">
  <ul>
    <li class='active'> a </li>
    <li> b &lt; </li>
    <li> c &lt; </li>    
    <li> d &lt; </li>
    <li> e &lt; </li>
  </ul>
</div>

...这里是javascript:

var toggleSlide = setInterval(function(){
    $("#slider li.active").removeClass().next().add("#slider li:first").last().addClass("active");
},300);

$("li").click(function(){
    clearInterval(toggleSlide);
});

我希望setInterval只运行一次,在最后一个列表项后停止。

我不确定是使用setInterval还是setTimeout?

2 个答案:

答案 0 :(得分:2)

你的意思是这样的:http://jsfiddle.net/xELsc/

[编辑:添加脚本]
像这样改变你的js:

var toggleSlide = setInterval( function() {
      $("#slider li.active").removeClass().next().last().addClass("active");
},300);

答案 1 :(得分:0)

Here我想出的是:

var toggleSlide = setInterval(function() {
    if ($("#slider li.wasActive").length == $("#slider li").length) {
        clearInterval(toggleSlide);
    } else {
        $("#slider li.active")
            .removeClass("active")
            .addClass("wasActive")
            .next()
            .addClass("active");
    }
    }, 300);

$("li").click(function() {
    clearInterval(toggleSlide);
});

显然不如CrisDeBlonde那么方便和简短,但仍然有效。另外,为了便于阅读,我链接了你的jQuery。