jquery动画不流畅

时间:2011-12-03 19:47:25

标签: jquery jquery-animate smooth

我对JS和JQuery不熟悉。 我正试图在JQuery中创建一种类型的GuitarHero游戏,但笔记并没有顺利进行 我正在做的基本上是在一个循环中调用setTimeout() - 每个都有一个不同的超时(在数组中给出 - 如果你愿意的话,“歌曲片段”)。 代码如下所示:

while(counter < curSong.numNotes){
                // set the parameters sent to runCreateNote
        runCreateNote(counter, margin, entity, interval, name);
        counter++;
}

runCreateNote调用setTimeout()时(出于范围目的)

这是动画代码:

    noteBall.animate({
            top: (noteBall.parent().height() - noteBall.height()*2) + 'px'
        }, {
            duration: fallingtime,
            queue: false,
            easing: "linear",
            step: function() {
                checkStep(id);  
            },
            complete: function() {
                reachBottom(id);    
            }
    });

    function checkStep(id){

        var noteBall = $("#" + id);
        var name = id.substring(0,1);
        if (name == "R"){
            if (isInRange(noteBall)){
                isRedIn = true;
            } else {
                isRedIn = false;
            }
        }
        if (name == "B"){
            if (isInRange(noteBall)){
                isBlueIn = true;
            } else {
                isBlueIn = false;
            }
        }
        if (name == "G"){
            if (isInRange(noteBall)){
                isGreenIn = true;
            } else {
                isGreenIn = false;
            }
        }
        if (name = "O"){
            if (isInRange(noteBall)){
                isOrangeIn = true;
            } else {
                isOrangeIn = false;
            }
        }

}

我知道如果任何代码是相关的,但我只是想表明动画看起来并不太重(我认为它会顺利运行)

我错过了一些关键原则吗?

1 个答案:

答案 0 :(得分:0)

好吧,如果没有看到你的其余代码或应用程序的演示,我的猜测就是这就是给你带来问题的一线:

top: (noteBall.parent().height() - noteBall.height()*2) + 'px'

如果您可以提前计算这些值并缓存它们,那么您可能会感觉更好。

您还应该考虑在checkStep中使用所有if语句并将它们移动到switch语句(或至少if / else) - 假设这些情况是互斥的。