-1

我正在尝试使用此功能为一堆<div>'设置动画:.animate

slideOut: function(container){
    var count = container.siblings().size() - 1;
    container.siblings().each(function(index, item){
        $(item).delay( index * 50 ).animate({ "left" : "-1000px" }, "fast", function(){
            if (index == count){
                container.delay(container.parent().parent().children().size() > 10 ? 10 * 50 + 300 : container.parent().parent().children().size() * 50 + 300  ).animate({ "left":"-1000px" }, "fast", function(){
                    container.parent().parent().clone(true, true).appendTo(metro.tiles);
                    metro.overlay(container.parent().parent().parent());
                }); 
            }       
        });
    });

},

我正在使用以下函数将它们带回 DOM:

slideInTiles: function(){
    $("#contentWrapper").empty();
    $("#contentWrapper").append(metro.tiles.children());

    $("#contentWrapper li").animate({"left": "0px"}, "fast");
    $("#contentWrapper li.activeTile").css({"left": "0px"}, "fast");
},

然而,问题是<li>我点击的并没有动画回到混音中。我必须用.css它把它带回来。导致此问题的代码中的错误在哪里?此外,由于我li通过使用.css它来将活动带回来,因此也不再动画出视图。我很确定这与.clone方法有关。但是怎么做,我想不通。

4

2 回答 2

1

如果没有适当的示例或一些更相关的代码,很难说,但我想说你的问题可能在这里:

container.delay(container.parent().parent().children().size() > 10 ? 10 * 50 + 300 : container.parent().parent().children().size() * 50 + 300).animate({

delay()仅适用于队列,并且您在开始任何队列之前使用它。然后,必须有一个比container.parent().parent().children().size()...更好的选择器。
此外,您可能希望使用length而不是size(). size()只是返回length. 最后,我会缓存所有这些选择器,以便您的应用程序可以更快地执行,即。$("#contentWrapper")可以缓存。

于 2012-04-18T20:54:07.710 回答
0

首先,我建议您退后一步,从您所在的位置简化并逐步进行,以便您知道问题何时开始。看看这个小提琴,它显示问题可能源于使用像素,你应该使用百分比来代替:http: //jsfiddle.net/UVPYW/1/除此之外,请确保您注意@elclanrs 关于延迟的回答,但还要确保您没有删除或克隆您想要从屏幕上移除的原始元素。看起来在您的代码中,您实际上删除了 #contentWrapper 中的元素,该元素最初是动画的,当您尝试重新设置动画时会导致问题。如果要在屏幕上为新元素设置动画,请确保在 css 中将其设置为首先具有负值。所以将它设置为最初的左侧 -1000 并且当您制作动画时,请确保它转到屏幕上可见的左侧值

于 2012-04-18T21:26:23.057 回答