2012-08-15 90 views
0

请有人解释为什么以下不起作用。这发生在同一个点击事件,但CSS功能不是直的后,所以我不想在动画功能上使用回调,如果可能的话。jQuery:动画功能后CSS功能不能触发

注意:动画会引发火灾,但是css does not。

  container.animate({ 
       left : (posLeft + slideWidth), 
      }); 


       container.css({ 
       left : '-'+(itemsLength + startX)+'px', 
      }); 
+1

所以,你要设置left属性的CSS,而被动画呢? – Musa 2012-08-15 08:21:30

+0

没有之后,谢谢穆萨。 – 2012-08-15 08:22:49

+0

解释你想要它做什么。您可能应该使用回调方法。 – Stefan 2012-08-15 08:23:24

回答

5

.animate不同步,即,但绝对没有保证.css被调用后.animate是(视觉)完成。所以在你的情况下,.animate被调用后,.css立即被调用,但left位置被.animate迅速覆盖,内部调用setInterval

根据该docs,第二个参数可以是一个对象,它定义的选项,其中的一个是complete

如果提供,所述完整回调功能被触发一旦 动画完成。这对于按顺序串联不同的 动画非常有用。该回调没有发送任何 参数,但是这被设置为正在动画的DOM元素。如果 多个元素是动画的,则该回调将按照每个 匹配的元素执行一次,而不是整个动画的一次。

container.animate({ 
    left : (posLeft + slideWidth), 
}, { 
    complete: function() { 
     $(this).css({ // as per doc, this is the DOM element being animated 
     left : '-'+(itemsLength + startX)+'px', 
     }); 
    }) 
}); 
+0

感谢SiGanteng的详细解答,希望对他人有所帮助。 – 2012-08-15 08:39:07