jquery优化循环动画函数

发布于 2024-12-17 23:33:44 字数 254 浏览 3 评论 0原文

我需要找到一种更有效的方法来实现此结果:

http://jsfiddle.net/H4sjf/1 /

setInterval().each() 以及后续的 .animate() 混合使该脚本相当慢。有没有办法利用其他一些“较便宜”的流程/功能来实现这一结果?

I'm needing to find a more efficient way of accomplishing this outcome:

http://jsfiddle.net/H4sjf/1/

The setInterval() mixed with the .each() and subsequent .animate() makes this script considerably slow. Is there a way to accomplish this outcome utilizing some other 'less expensive' process/functions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

调妓 2024-12-24 23:33:44

也许您可以为 animate() 创建一个回调函数,而不是 setinterval 来重新设置“this”动画并将其自身作为回调调用?

[编辑]
我删除了一些不必要的代码:

http://jsfiddle.net/8kgAB/1/

DoPopulateSoundBoard();
function DoPopulateSoundBoard(){
    $('.sound-syn-column').each(function(){
        var dSoundSyn = '';
        for( i = 0; i <= 8; i++ ){
                dSoundSyn += "<div class='ui-corner-all sound-syn'></div>";
            }
        $(this).append( dSoundSyn + "<div class='sound-syn-cover'></div>" );
    });




        $('.sound-syn-cover').each(function(){
                    test34($(this));
        });

}

function test34(obj){
    obj.animate({height: Math.floor( Math.random()*56) }, 500, function(){
            test34($(obj));
    });       
}

不确定如果这更快,但可能是因为 setinterval 太慢了。

Instead of setinterval maybe you could create a callback function for animate() that re-animates "this" and calls itself as a callback?

[edit]
I removed a bit of unnecessary code:

http://jsfiddle.net/8kgAB/1/

DoPopulateSoundBoard();
function DoPopulateSoundBoard(){
    $('.sound-syn-column').each(function(){
        var dSoundSyn = '';
        for( i = 0; i <= 8; i++ ){
                dSoundSyn += "<div class='ui-corner-all sound-syn'></div>";
            }
        $(this).append( dSoundSyn + "<div class='sound-syn-cover'></div>" );
    });




        $('.sound-syn-cover').each(function(){
                    test34($(this));
        });

}

function test34(obj){
    obj.animate({height: Math.floor( Math.random()*56) }, 500, function(){
            test34($(obj));
    });       
}

not sure if this is any faster, but it might be since setinterval is so slow.

握住我的手 2024-12-24 23:33:44

您可以通过向每个 div 添加单独的 setInterval() 函数来解耦 setInterval().each()一次:

$('.sound-syn-cover').each(function(){
    var $this = $(this);
    $this.data('intervalCallback', setInterval(function(){
        $this.animate({height: Math.floor( Math.random()*56) }, 500);
    }, 300));
});

jsFiddle

You can decouple setInterval() and .each() by adding individual setInterval() functions to each div just once:

$('.sound-syn-cover').each(function(){
    var $this = $(this);
    $this.data('intervalCallback', setInterval(function(){
        $this.animate({height: Math.floor( Math.random()*56) }, 500);
    }, 300));
});

jsFiddle

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文