【问题标题】:calling a function inside setTimeout and inside a function在 setTimeout 和函数内部调用函数
【发布时间】:2013-04-04 12:13:45
【问题描述】:

基本上我已经写了一个函数:

函数动画(){ 设置超时( 功能(){ requestAnimationFrame(动画); if (player.currentFrame == player.frames) { 播放器.currentFrame = 0; } 别的 { player.currentFrame++; } } , 1000 / 15); }

我正在尝试使用此代码调用它 animation(fps);

我试着把它变成这样:

函数动画(fps){ 设置超时( 功能(){ requestAnimationFrame(动画); if (player.currentFrame == player.frames) { 播放器.currentFrame = 0; } 别的 { player.currentFrame++; } } , 1000 / fps); }

并尝试使用animation(30) 调用它 但它没有用。我试过这样的搜索主题,但没有一个是我想要的。

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

【问题讨论】:

    标签: javascript function call


    【解决方案1】:

    setTimeout 只会在时间过去后调用该函数一次,因此除非您再次使用fps 调用animation,否则它只会运行一次并完成。您可以使用setInterval1000/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/

    【讨论】:

    • 是的,我确定我想要 setTimeout,它是否也适用于 setTimeout:/?
    【解决方案2】:

    你试过这个语法吗

    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);

    【讨论】:

    • @JeffShaver:为什么? .我以前用过它,直到现在和我一起工作得很好
    • @MuhammadOsman 1) 它比较慢。基本上, setTimeout 必须在其上运行eval() 以确定您想要做什么,并且2)如果您传入一个字符串,它会在不同的范围内运行该功能,因此可能会遇到参数未定义的问题.不带参数的正确语法是 setTimeout(animation, 1000 /fps); 或带参数:setTimeout(function() { animation(param1,param2) }, 1000/fps);
    • 嗯..你能帮我解决我的问题吗?
    • @Nucleus 你能按照 Jeff 所说的那样尝试更改吗?我编辑了答案,所以请检查一下。
    猜你喜欢
    • 2011-11-14
    • 1970-01-01
    • 2012-01-12
    • 2021-06-25
    • 2016-10-30
    • 2019-04-10
    • 2017-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多