jQuery的问题';s.animate()

jQuery的问题';s.animate(),jquery,jquery-animate,Jquery,Jquery Animate,我正在使用.animate()在几个div通过.show显示后平滑地重新定位它们(“慢”)。由于div可能仍在制作动画,也可能不在制作动画,因此我还使用.queue()确保在动画制作完成后进行移动 问题:。animate()不起作用。它找到了正确的代码行,但不做任何事情,也不生成任何错误。帮忙 Javascript: function arrange_sections() { var margin = 20; var left = margin;

我正在使用.animate()在几个div通过.show显示后平滑地重新定位它们(“慢”)。由于div可能仍在制作动画,也可能不在制作动画,因此我还使用.queue()确保在动画制作完成后进行移动

问题:。animate()不起作用。它找到了正确的代码行,但不做任何事情,也不生成任何错误。帮忙

Javascript:

function arrange_sections() {
        var margin = 20;
        var left = margin;
        $(".section.active").queue(function() {
            $(".section.active").each(function() {
                $(this).animate({ "left": left }, "slow");
                left += $(this).width() + margin;
            });
        });
}
CSS:
(我使用show(“slow”)将部分移出显示:无)


我的最佳猜测是:您需要在CSS中添加“position:relative”或“position:absolute”样式


我试图运行代码,但什么也没看到。然而,当我使用Firebug的HTML选项卡查看页面时,我看到大多数页面都有style=“left:140px”或类似的样式。

+1与David所说的定位相同。您的部分可能应该绝对定位在相对定位的div中。此外,我认为您不需要jQuery/Queue方法。请尝试以下方法:

$(".section.active").each(function() {
    $(this).show("slow", function() {
    $(this).animate({ "left": left }, "slow");
    left += $(this).width() + margin;
    });                
}); 
这将导致在显示后调用动画左侧。我不知道你是如何处理这个节目的,但是当我在一个单独的函数中使用了来自动画左侧的相同模式,然后一个接一个地调用时,动画函数根本没有从第二个队列函数中调用

根据我在中读到的内容,看起来所有动画函数都会自动添加到内置的fx队列中。

最终找到了答案——我需要做的就是在传递给queue()的函数末尾包含dequeue()函数


谢谢你们的帮助,伙计们

谢谢你的猜测——不幸的是,事实并非如此。我现在已经包括了我的CSS代码,以防里面有任何线索。不过,有趣的是,它对你有用。我将尝试将此功能与我的其他代码隔离,并通过这种方式修复bug。它似乎也适用于谷歌Chrome。也许我们需要查看更多的上下文来了解您的案例中出现了什么问题。应该“.section”和“.active”类之间有一个空格“.section.active”)。换句话说:您是否检查了css路径查询是否找到了所需的元素?您可能还希望将$('.section.active')的结果分配给一个变量,而不是创建两次对象。我的意思是选择.section和.active的交集,因此是的,no空格是正确的。使用Firebug,我已经确定它会到达.animate()行,如果我用不同的函数(如.css())替换.animate()行,它会工作得很好。Aleksi——您两次创建$('.section.active')是对的。我最初有“$(this)”,但由于某种原因,我改变了它,认为queue()只会在选择了多个对象时影响第一个对象。事实上,我无意中导致我的函数被调用的次数超过了我的期望!
$(".section.active").each(function() {
    $(this).show("slow", function() {
    $(this).animate({ "left": left }, "slow");
    left += $(this).width() + margin;
    });                
});