Ben CSS3 geçişleri ile canlandırılır dinamik olarak oluşturulan html öğesi çalışıyorum oluşturulan etmek.CSS3 geçişleri dinamik elemanlar
Animasyonun, eleman oluşturulmadan hemen önce başlamasını istiyorum. Bunlar için
i elemanının orijinal pozisyonunu ayarlamak ve sonra jquery Css() yöntem
Ama herhangi bir geçiş olmadan hedef pozisyonunda apears yeni elemanı tarafından hedef konumunu ayarlamak bir sınıf oluşturmak .
Yeni css değerini ayarlamak için 0ms setTimeout kullanırsam çalışır.
Yanlış yaptığım bir şey var mı? veya bir sınırlama mı? Ben setTimeout geçici çözümünü kullanmam gerektiğini düşünmüyorum.
Teşekkürler!
UPDATE: İşte deneme için jsfiddle.net üzerinde çalışan kod ile bir bağlantıdır. http://jsfiddle.net/blackjid/s9zSH/
GÜNCELLEME ben cevap çözümü ile örnek güncelledik.
http://jsfiddle.net/s9zSH/52/
İşte tam bir çalışma örneği kod Bir zaman aşımı kullanmaya gerek yoktur
<html>
<head>
<script src="http://code.jquery.com/jquery-1.4.3.min.js"></script>
<script type="text/javascript">
//Bind click event to the button to duplicate the element
$(".duplicate").live("click", function (e){
var $to = $("#original .square").clone()
$("body").append($to);
if($(e.target).hasClass("timeout"))
//With setTimeout it work
setTimeout(function() {
$to.css("left", 200 + "px");
},0);
else if($(e.target).hasClass("notimeout"))
// These way it doesn't work
$to.css("left", 200 + "px");
});
</script>
<style type="text/css">
.animate{
-webkit-transition: all 1s ease-in;
}
.square{
width:50px;
height:50px;
background:red;
position:relative;
left:5px;
}
</style>
</head>
<body>
<div id="original">
<div class="square animate"></div>
</div>
<button class="duplicate timeout">duplicate with setTimeout</button>
<button class="duplicate notimeout">duplicate without setTimeout</button>
</body>
</html>
addendum: Zaman aşımı kullanmak zorunda kalmazsınız, bazen iyi olabilir. gerçekten uygulamanıza bağlı. Sıklıkla yapılırsa, stilleri senkronize yeniden zorlama, UI kekelenizi yapabilirsiniz. Bunu fark ederseniz, birkaç kareden karmaşık bir animasyonu kırmak/amorti etmek için zaman aşımı kullanın. – mmaclaurin
Teşekkür ederim, bu bulduğum ilk açıklama * Neden * bir setTimeout CSS geçişlerini zorlamak için etkilidir. –
Vay, harika! Günümü kurtardın. Nedeni bulmak için epey zaman harcadım, sonunda çözdün. Tekrar teşekkürler! –