javascript - 递归函数内的 jQuery 动画非常慢

标签 javascript jquery html

我有一个箭头在三张汽车图片上水平弹跳的小动画。箭头以每次弹跳 200 毫秒开始,每转一圈时间增加 200 毫秒,直到在 3 号车上第 7 圈停止。

它在 Chrome 和 Firefox 上几乎可以顺利运行。在 Safari 7 上,它启动很快,两圈后变得非常慢,并且跳过很多帧。

Javascript代码如下:

var fwd = true;
var cnt = 6;
var time = 200;

function play(){
    var tgt = fwd ? '310px' : '10px';

    $('#arrow').animate({left: tgt}, time, function() {
        if (cnt > 0){
            cnt--;
            fwd = !fwd;
            time += 200;
            play();
        } else {
            finalTarget();
        }
    });

}

function finalTarget (){
    $('#arrow').animate({left: '230px'}, 466, function(){
        $('#car3').hide(0).show('pulsate', {times: 3}, 600, function(){
            $('#car1, #car2').fadeTo('slow', 0.3);
        });
    });
}

代码也在 JSFiddle http://jsfiddle.net/MkeeE/1/

这段代码有什么问题?

我不应该在回调函数中调用“play”函数吗?

编辑: 正如 @jfriend00 在评论中指出的那样,这段代码没有递归。 “当调用动画完成函数并再次调用 play() 时,play() 的原始调用早已完成。”

最佳答案

执行“循环”动画风格的典型方法是在回调中交替使用动画函数。

我修改了您提供的 fiddle :http://jsfiddle.net/Culyx/fLz5U/4/

Jquery:

cnt = 6;

var arrowSpeed = 400;
bounceLeft = function(){
        $("#arrow").animate({left: "+=380px"},{duration:arrowSpeed, complete: bounceRight});
    }
    bounceRight = function(){
        cnt--;
        if(cnt>0){
            $("#arrow").animate({left: "-=380px"},{duration:arrowSpeed, complete: bounceLeft});}else{
            finalTarget();
            }
    }
bounceLeft();


function finalTarget (){
    $('#arrow').animate({left: '230px'}, 466, function(){
        $('#car3').hide(0).show('pulsate', {times: 3}, 600, function(){
            $('#car1, #car2').fadeTo('slow', 0.3);
        });
    });
}

动画是一样的,但我想我误判了动画宽度;还可以将其切换到 Document.Ready 上,可以通过按钮轻松切换回功能。

关于javascript - 递归函数内的 jQuery 动画非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21489883/

相关文章:

jquery - 定位来自 jQuery 验证插件的消息

jquery - 当我点击 div 之外的任意位置时,如何使 div 关闭?

javascript - Highcharts - 在不丢失默认选项的情况下添加额外的导出选项

javascript - 我应该在每个页面的 ASP.net MVC 应用程序中的什么位置放置 "ng-app"指令?

javascript - 复杂的 sinatra 参数

javascript - 使用 jquery,下拉列表选择更改时如何重定向?

javascript - 为什么我的航路点添加类在向下滚动时没有删除

ASP.Net AJAX 使用类似 $get ('myId' 的语法),这是标准的 Javascript 还是 JQuery?

javascript - 如何在使用 Fabric 的同时使用 css 更改 Canvas 的高度和宽度

javascript - 将 JavaScript 中的内容打印到 HTML/PHP 页面的表格中