在setInterval函数中更改函数参数

时间:2011-04-11 00:21:37

标签: jquery settimeout setinterval

有没有办法将这五个setTimeout放入一个setInterval?我需要在每个间隔后以某种方式切换函数的参数。基本上,我希望能够清除动画而不必清除5个setTimeouts。这是动画。 www.hodaradesign.com。谢谢!

<script type="text/javascript">
$(window).load(function () {
    setTimeout ("pulse('1')", 300); 
    setTimeout ("pulse('2')", 500); 
    setTimeout ("pulse('3')", 700); 
    setTimeout ("pulse('4')", 900); 
    setTimeout ("pulse('5')", 1100); 
});

function pulse(n) { 
    $(".roll"+n).animate({"opacity": "0"}, 650);
    setTimeout (function (){
        $(".roll"+n).animate({"opacity": "1"}, 350);
    },800)
};

</script>

3 个答案:

答案 0 :(得分:1)

试试这个:

<script type="text/javascript">
$(window).load(function () {
        var iCounter = 1; //variable to keep track of current iteration.
        var interValKey = null;//variable to store the key to clear the interval later.
        setTimeout (function(){
            interValKey = setInterval(function(){
                pulse(iCounter); 
                iCounter++;
                if(iCounter == 6){
                clearInterval(interValKey);
                }
            }, 200);
        }, 300); 
});

function pulse(n) { 
    $(".roll"+n).animate({"opacity": "0"}, 650);
    setTimeout (function (){
        $(".roll"+n).animate({"opacity": "1"}, 350);
    },800)
};

</script>

答案 1 :(得分:1)

使用setInterval调用和函数都可以访问的变量。

<script type="text/javascript">
var n = 1;

$(window).load(function () {
    setTimeout(function() {
        setInterval(pulse, 200);
    }, 300);
});

function pulse() {
    var current_n = n; // avoid a race condition
    $(".roll" + current_n).animate({"opacity": "0"}, 650);
    setTimeout (function (){
        $(".roll" + current_n).animate({"opacity": "1"}, 350);
    }, 800);

    n += 1;
};

</script>

答案 2 :(得分:0)

向脚本添加另一个参数以指定当前超时,然后使用函数本身递增计数并确定何时(以及是否)发生下一次调用。

<script type="text/javascript">
$(window).load(function () {
    setTimeout( function() { pulse(1,200); }, 300 ); 
});

function pulse(n,time) { 
    if (n <= 5) {
       setTimeout( function() { pulse(n+1,time); }, time );
    }

    $(".roll"+n).animate({"opacity": "0"}, 650);
    setTimeout (function (){
        $(".roll"+n).animate({"opacity": "1"}, 350);
    },800);

};

</script>