ここに問題があります.htmlブロックのツリー構造があり、グローバルコンテナは幅(X)と高さ(Y)が固定されています。レベル上のブロックの 1 つをクリックすると、他のすべてのブロックがある程度のサイズに縮小されますが、クリックされたブロックは残りのスペースに拡大され、サブレベルがその場所に表示されます。
animate
すべての縮小について、イージング効果のあるデフォルト関数を使用しています.1レベル縮小するときは、拡大のバグを避けるために、次のようなことをしなければなりません:
$tabs.not($obj).animate({height:32<<$obj.getVerUp().length+"px"},{duration:300,
step:function() {
$obj.height(function(){
var sum = 0;
$tabs.not($obj).each(function(){
sum += $(this).height();
});
return $obj.getCont().height()-sum+"px";
});
}
});
$tabs
は現在のレベルのすべてのタブです。$obj
- 拡大したい 1 つのタブです。
主な問題は次のとおりです。深いレベルにあるタブを開くと、より高いレベルのすべてのタブをアニメーション化して、もう少し縮小する必要があるため、$obj
X と Y が変化するため、現在のアニメーションを使用する必要があります新しい値ですが、異なるレベルで 3 つの異なるアニメーションを呼び出すと、バグが発生します。より深いレベルのアニメーションの 1 つが 1 ステップ早く終了し、上のレベルのアニメーションがオブジェクトを 5 倍に拡大します。 -10 ピクセル増やせば、そのスペースが使い果たされることはありません。
2つ目の問題は、イージングと同時に約 50 個のオブジェクトをアニメーション化する必要があることです。これは少しやり過ぎです。
そして最後の問題は、上記のようにアニメーションでコールバックを呼び出すと、リスト内のすべてのタブに対して 1 つのステップが必要である一方で、コレクションのアニメーションごとに個別にstep
ステップを呼び出すという奇妙な感覚があります(不要なスクリプトを避けるため)。 )$tabs
それをすべて修正する他の方法があるかもしれませんが、私はまだすべてのjQuery関数を発見していないので、私が見る唯一の方法はイージングをシミュレートし、1つのアニメーションですべてを行うことです.
setInterval
簡単な方法があれば、それをいつクリアする必要があるかを判断し、各イージング値を計算する必要はありません。
jQueryにはある種の空のアニメーションイージングがありますか?
$().css("height":starth+"px").animate({height:endh},{duration:300,
step:function(fn) {
// all the animation actions here via fn end value
}
});
前もって感謝します。
私が必要としているのは、コードで完全に機能するソリューションではなく、それらの主題に関するいくつかの啓蒙です:
アニメーション化された要素のコレクションに対して 1 つのステップ関数を呼び出す合法的な方法はありますか、それとも、コレクションで
step
1 つを使用すると 1 回呼び出される可能性があり.animate
ます。jquery が multiple をどのように処理するかについて誰かが光を当てることができれば、本当に感謝してい
.animate
ます.setInterval
。または、setTimeout と同等のものを大量に持っているでしょうか.setIntervals
(ほとんどのブラウザーでは大量に処理できません)。「アニメーション化」イージングをシミュレートする方法、おそらくいくつかの関数名、またはそれを達成するための特別なトリックはありますか(私が見るのは、おそらく変更する隠し要素または「ウィンドウ」プロパティだけです)
または、自分の目標を達成するのに役立つ可能性のある、研究すべき機能を備えたいくつかの指示されたプッシュ