2011-12-21 24 views
5

.appendTo()を使って要素のDOM位置を変更したいと考えています。これが完了したら、CSS3で要素をアニメートする必要があります。jQueryを使ってCSS3アニメーションを実行する.appendTo

要素はアニメーション化されず、代わりに新しいCSSスタイルにスナップされます。

はJavaScript:

$(".run").click(function() { 
    $(".imageOriginal").appendTo(".insert").toggleClass("imageAnimated"); 
}); 

HTML:

<div class="insert"> </div> 
<img src="img/img1.png" class="imageOriginal"/> 

CSS:

.imageOriginal { 
    -webkit-transform: scale(0.1); 
} 
.imageAnimated { 
    -webkit-transition: all 1s ease-in-out;  
    -webkit-transform: scale(1); 
} 

私は2つの異なるクリックイベントに発射する.appendTo().toggleClass()方法を分離しました。このメソッドは機能します(しかし、明らかに望ましくない)。私はまた、追加の後に.delay(1000)を使ってみましたが、これはうまくいきません。

+0

jQueryのUIを提供します.switchClass()関数の説明は次のとおりです。 http://stackoverflow.com/questions/1248542/jquery-animate-with -css-class-without-explicit-styles – Stephen

+0

@Stephen CSS3トランジションを使用するためにjQuery UIを更新しましたか? – Jasper

+1

@Stephen簡単に手作業でコード化できる動作を実装する単一の関数のためだけに(肥大化した、ゴミ)ライブラリを推奨しないでください。 – Bojangles

答えて

3

問題は、コンテンツを追加してから同時にクラスを切り替えることです。あなたが.appendTo()呼び出しを削除すると、それが正常に動作します:ここで

$(".imageOriginal").toggleClass("imageAnimated"); 

はデモです: http://jsfiddle.net/38FrD/1/

私は何が起こっているのか本当にわからないが、あなたは放火魔に画像要素を見ればあなたがいることがわかりますtransition持続時間が指定されていても、追加されるプロパティの持続時間は0sです。

また、.delay()は、.animate()コールのようなキューでのみ機能します。

UPDATE

あなたはsetTimeout匿名関数の内部で.toggleClass()電話をかける場合、必要に応じて動作するように表示されます。ここでは

$(".run").click(function() { 
    var $this = $(".imageOriginal"); 
    $this.appendTo('.insert'); 
    setTimeout(function() { 
     $this.toggleClass("imageAnimated"); 
    }, 0); 
}); 

はデモです:http://jsfiddle.net/38FrD/2/

+0

感謝の気持ちでした。この問題を解決する方法がまだわかりません。最後の手段はCSS3の代わりにjquery .animateを使用することです。 – jaredrada

+0

@porfuseただ興味があります。なぜ別の要素に画像を追加していますか?また、私はあなたのために働くべき解決策で私の答えを更新しました。 – Jasper

+0

私はラッパーの中で画像のグループをアニメートしたいですが、**クリックされたものは別のアニメーションを持っていますので、私は結局$(これ)を使用します。クリックされたイメージを別のdivに追加して、それをターゲットにしてその特定のイメージに異なるアニメーションを与えることができます。 – jaredrada

関連する問題