3

我有一个未知值的变量,它将是一个整数。为此,让我们说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.

我怎样才能做到这一点?

4

5 回答 5

7

实例化一个计数器变量,每次调用 anim() 时递增。什么时候

counter % a === 0

然后你运行 this.appendEnd()

于 2012-06-25T22:41:05.657 回答
2

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

if(counter % a == 0) {
    //code you want called
}
于 2012-06-25T22:41:37.160 回答
1

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

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

现在,您可以检查该计数器。要查看“每 X 次”发生某事,只需检查 X 的模数是否为 0:

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

你有它!

于 2012-06-25T22:41:26.527 回答
1

这是一种封装计数器的方法,但对“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;
于 2012-06-25T22:52:33.977 回答
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;

    }
于 2012-06-25T22:44:07.830 回答