在setTimeout内部和函数内部调用函数

时间:2013-04-04 12:13:46

标签: javascript function call

基本上我写了一个函数:

function animation(){
    setTimeout(
        function(){
        requestAnimationFrame(animation); 
        if (player.currentFrame == player.frames) {
            player.currentFrame = 0;
            } else {
            player.currentFrame++;
            }
        }
    , 1000 / 15);
}

我试图用这段代码调用它 animation(fps);

我试着这样做:

function animation(fps){
    setTimeout(
        function(){
        requestAnimationFrame(animation); 
        if (player.currentFrame == player.frames) {
            player.currentFrame = 0;
            } else {
            player.currentFrame++;
            }
        }
    , 1000 / fps);
}

并试图用animation(30)调用它 但它不起作用。我尝试过像这样的搜索主题,但不是它们就像我想要的那样。

任何帮助将不胜感激! :)

2 个答案:

答案 0 :(得分:0)

setTimeout只会在时间结束后调用该函数一次,因此,除非您再次使用animation致电fps,否则它只会运行一次并完成。您可以使用setInterval每隔1000/fps毫秒调用该函数。

var frame = 0;
animation(20);
function animation(fps){
    console.log(fps)
    setInterval(
        function(){
            console.log("A");
            document.getElementById("sp1").innerHTML = frame;
            frame++;
        }
    , 1000 / fps);
}

示例小提琴:http://jsfiddle.net/Up4Cq/

或者如果你想使用setTimeout,你需要再次调用animation函数:

function animation(fps){
    console.log(fps)
    setTimeout(
        function(){
            console.log("A");
            document.getElementById("sp1").innerHTML = frame;
            frame++;
           animation(fps);
        }
    , 1000 / fps);
}

以下是setTimeout的小提琴:http://jsfiddle.net/Up4Cq/1/

答案 1 :(得分:0)

您是否尝试过此语法

function animation(fbs){
        requestAnimationFrame(animation); 
        if (player.currentFrame == player.frames) {
            player.currentFrame = 0;
        } else {
            player.currentFrame++;
        }        
       setTimeout(function(){animation(fbs) }, 1000 / fbs);
}

我将代码从setTimeout('animation(fbs)', 1000 / fbs);更改为setTimeout(function(){animation(fbs) }, 1000 / fbs);