2012-01-19 13 views
1

アニメーション機能が高さを低くすると、& divの幅になり、他の関数は並行して実行できます。高さが&になる前にdivを0にする前にdivをフェードアウトさせたいとします。 基本的に私のdivの高さが&の幅が50%減少すると、それをフェードアウトにしたいと思っています。出来ますか?jqueryアニメーション関数へのフック

animateにはコールバックがありますが、アニメーションが完了するとコールバックが呼び出されます。これは嫌いです。ここ は、可能ならば、私のサンプルコードで溶液を教えてください、私のアニメーションコード

$('#my-id').animate({width: 0, height: 0}, 1000); 

をサンプリングしています。ありがとう

答えて

2

をアニメーションの各ステップ。この機能では、適切とすぐにその高さが元の値の半分に達すると、要素の不透明度を設定することができます。

$("#my-id").animate({ 
    width: 0, 
    height: 0 
}, { 
    duration: 1000, 
    step: function(now, fx) { 
     if (fx.prop == "height") { 
      var threshold = fx.start/2; 
      if (now < threshold) { 
       $(fx.elem).css("opacity", now/threshold); 
      } 
     } 
    } 
}); 

をこれは、あなたが期待するように動作し、並列に二つの効果を実行する必要があります。渡す際には、結果として生じるフェーディングアニメーションは、エレメントの幅がそれよりも大きい場合、より流動的になることに注意してください。要素の高さよりも広い場合は、heightの代わりにwidthプロパティを監視します。

+0

ステップ関数から現在の高さと幅を検出する方法は?いくつかの行は私には明らかではない....それは何か... var threshold = fx.start/2; どのような情報がありますか詳細に議論し、積極的に教えてください...ステップ関数から現在の高さと幅を調べる方法は? – Thomas

+0

私がリンクしているページで説明したように、step関数はアニメーション化されたプロパティの現在の値である 'now'とアニメーション化された要素(' fx.elem')を含む 'fx'の2つの引数を受け取ります。アニメーションプロパティ( 'fx.prop')、アニメーションプロパティの開始値と終了値(' fx.start'と 'fx.end')を含んでいます。 「閾値」変数は、要素の開始高さの半分に割り当てられ、50%閾値を超えたかどうかを判定し、不透明度値を計算するために使用される。 –

+0

私はURコードを使用してテストします。それはうまく動作しているが、私は起こっていない私のdivをフェードアウトする方法。ここで私のコードを更新します。 URLを見てください.. http://jsfiddle.net/Sj4eG/12/。divの高さと幅が300X300pxであるため、150のようにコード化されたしきい値をハード設定しました。だから私はアニメーションが150 pxに近い私のdivのサイズを減らすとき、私は円滑にdivをフェードアウトしたいと思います。私は、URコードを使用して何かを試した...しかし、私はURコードを使用した後に効果が得られていない。だから、urのコードをチェックしてください。 – Thomas

0

paramsを50%にアニメートしてからfadeOutにしてアニメーションを続行します(ただし、実際には最後のアニメーションは必要ありません。既に目に見えません)。

$('#my-id').animate({width: 50, height: 50}, 1000, function() { 
    $(this).fadeOut('fast', function() { 
     $(this).animate({width: 0, height: 0}, 1000); 
    }); 
}); 

または最後のアニメーションなし:

$('#my-id').animate({width: 50, height: 50}, 1000, function() { 
    $(this).fadeOut('fast', function() { 
     $(this).css({width: 0, height: 0}); 
    }); 
}); 
+0

私は50のような幅のハードコードを与えることはできません。むしろ、高さと幅が50%減少すると、それをフェードアウトさせる必要があることを検出する必要があります。だから私にそれをする方法を教えてください。 – Thomas

+0

このサイトhttp://demos.kendoui.c​​om/web/window/index.htmlにアクセスしてください。どこからウィンドウを閉じると、そのウィンドウが高さ&幅がゼロになる前にフェードアウトしているのを見ることができます。それを達成する方法... plzzガイド。ありがとう – Thomas

+0

この場合、2つのアニメーションは並行して動作します。コールバックを使用する必要はありません。コールバックではなく、1つずつ2つのアニメーションを呼び出すだけです。ここではサンプルです:http://jsfiddle.net/pefTW/ – Samich

1

あなたは2つのアニメーション次々に実行することができます:あなたはanimate()step functionを渡すことができ、それがために呼び出されます

$('#my-id').animate({width: 50%, height: 50%}, 1000).fadeOut("slow"); 
+0

urコードにバグがあります。 50%は正しくありません。私はそれをテストしなかったと思う。 – Thomas

関連する問題