Javascript每x次迭代在循环内运行一个函数

时间:2012-06-25 22:37:38

标签: javascript

我有一个未知值的变量,它将是一个整数。为此,我们说var a = 3;

我有一个连续调用的函数:

var a = 3;
function anim() {
        left = parseInt(galleryInner.css('left'), 10);   
        if(Math.abs(left) >= (galleryItem.length * galleryItem.width())){
            galleryInner.css('left', 0);
        }
        galleryInner.animate({left: '-=20' }, 200, anim);

        that.appendEnd();
}

我只想每隔3次运行this.appendEnd(),因为a === 3

我该怎么做?

5 个答案:

答案 0 :(得分:6)

实例化一个计数器变量,每次调用anim()时都会递增。当

counter % a === 0

然后你运行this.appendEnd()

答案 1 :(得分:1)

首先,您需要一个递增变量来计算函数被调用的次数。例如,用这个开始你的功能:

var me = arguments.callee;
me.timesCalled = (me.timesCalled || 0)+1;

现在,您可以检查该计数器。要看到事情发生了#34;每X次",只需检查X的模数是否为0:

if( me.timesCalled % a == 0) { /* do something */ }

你有它!

答案 2 :(得分:1)

创建第二个变量,该变量保持当前计数,然后包含您希望每三次迭代的调用

if(counter % a == 0) {
    //code you want called
}

答案 3 :(得分:0)

你应该检查你的计数器是否大于0,否则你的函数appendEnd将在第一次被解雇:

if (counter > 0 && counter % a == 0) { ... }

以下是完整的代码:

var appendEndExecutedTimes = 0;

function anim(){
        left = parseInt(galleryInner.css('left'), 10);   
        if(Math.abs(left) >= (galleryItem.length * galleryItem.width())){
            galleryInner.css('left', 0);
        }
        galleryInner.animate({left: '-=20' }, 200, anim);


        if (appendEndExecutedTimes > 0 && appendEndExecutedTimes % a === 0) {
           that.appendEnd();
        }
        appendEndExecutedTimes += 1;

    }

答案 4 :(得分:0)

这是封装计数器的方法,但是对“a”使用全局变量:

var a = 3;

function anim(){
    // Run the usual code here
    // ...

    if (++anim.counter % a === 0) {
        // Run the special code here
        // ...
    }
}
// Initialize static properties.
anim.counter = 0;

这是一种封装“a”变量的方法,将其称为“频率”:

function anim(){
    // Run the usual code here
    // ...

    if (++anim.counter % anim.frequency === 0) {
        // Run the special code here
        // ...
    }
}
// Initialize static properties.
anim.counter = 0;
anim.frequency = 1;

然后在第一次调用anim()之前设置所需的频率值:

anim.frequency = 3;