2012-04-18 57 views
-1

我试图用.animate具备此功能的动画一堆<div>的:

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才能将其恢复。代码中导致此问题的错误在哪里?另外,因为我使用.css将活跃的li带回来,所以它也不再以动画形式出现。我很确定这与.clone方法有关。但是,怎么样,我无法确定。

+1

[Demo](http://jsfiddle.net/)? – 2012-04-18 20:37:25

+0

您在标题中提及'$(this)',但在代码中没有看到任何此类内容。 – Sparky 2012-04-18 20:49:54

+0

这只是应用程序的一小部分。创建演示将非常困难。如果你需要澄清,请告诉我。 – amit 2012-04-18 20:50:49

回答

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")

+0

通过缓存,你的意思是? – amit 2012-04-18 21:31:59

+0

通过缓存我的意思是说,你将选择器分配给一个变量,这种方式jQuery不会一直寻找你的元素。即'var $ wrapper = $(“#contentWrapper”)'然后像'$ wrapper.doSomething()'一样使用它' – elclanrs 2012-04-18 21:34:22

0

首先,我会建议退后一步,简化你从哪里开始,然后一步一步走,以便知道问题何时开始。看看这个小提琴,它显示问题可能源自像素,你应该使用百分比代替:http://jsfiddle.net/UVPYW/1/超出这个范围,请确保你注意@elclanrs关于延迟的回答,但也要确保你没有删除或克隆你想要从屏幕上消失的原始元素。它看起来像在你的代码中,你实际上删除了首先被动画化的#contentWrapper中的元素,当你尝试重新创建动画时,这会导致问题。如果你想在屏幕上设置一个NEW元素的动画,请确保你在CSS中设置它为负值。所以将其设置为最初的-1000左右,并且当您设置动画时,请确保它的左侧值在屏幕上可见