在javaScript上使用setInterval

时间:2012-01-22 01:37:52

标签: javascript

与往常一样,如果有人能帮我一点点,我会非常感激。

我有以下几行代码:

var count = 0;
var limit = 2000;
function liveCount(){
    var increment = count + 10;
    count = increment;
    if(count <= limit){
        document.getElementById('showCount').textContent=count;
    }else{
        clearInterval();
    }
}
var counter = setInterval('liveCount()', 10);

这段代码的作用是模拟计时器从0到X的计数器。 它独立使用时效果很好,它开始计数并以10毫秒的间隔更新计数,直到达到极限,然后停止。
到目前为止一切顺利。
我的问题是,当我将此代码嵌套在另一个函数中时,这个函数将提供“计数和限制”变量的值,我得到一个错误,说“liveCount()”没有定义,参考“setInterval()”的参数。

我已经尝试了所有我能想到的东西,但我无法让它发挥作用 有什么想法我错过了什么或做错了什么?

谢谢大家。

3 个答案:

答案 0 :(得分:1)

也许这就是你要找的......

function liveCount(count, limit){
    var increment = count + 10;
    count = increment;
    if(count <= limit){
        document.getElementById('showCount').textContent=count;
    }else{
        clearInterval(counter);
    }
}

function wrapper() {
    // calculate count and limit
    count = 0;
    limit = 2000;
    liveCount(count, limit);
}

var counter = setInterval(wrapper, 10);

答案 1 :(得分:1)

正如您所写,liveCount必须是全局window对象的属性。将此代码放在函数中将liveCount定义为该函数的本地代码,这意味着window.liveCount不存在。

不要传递setInterval代码来执行;相反,给函数提供一个引用,就像这样(注意没有引号):

var counter = setInterval(liveCount, 10);

完整示例:

function someOtherFunc(limit) {
    var count = 0;
    function liveCount() {
        var increment = count + 10;
        count = increment;
        if (count <= limit) {
            document.getElementById('showCount').textContent = count;
        } else{
            clearInterval();
        }
    }
    var counter = setInterval(liveCount, 10);
}

您可能还想返回counter(或类似内容),但您没有显示足够的代码以确定。

答案 2 :(得分:0)

将你的调用放在一个闭包中。

var counter = setInterval(function() {
    liveCount();   
}, 10);

示例:http://jsfiddle.net/MattLo/HATmY/