jQuery UI 1.8を使用しています。
Jquery アニメーションが非同期であることに気付きました。いくつかのセクションを含む Jquery アコーディオンのあるページがあるため、これは私にとって問題だと思います。ページが読み込まれると、これらのセクションの一部を展開する Javascript 関数を呼び出します。それらは拡大するにつれてアニメーション化されます (つまり、ゆっくりと拡大します)。
また、ページの起動時に、Jquery を使用してページ上の特定の要素にスクロールする関数があります。それ自体では機能せず、アコーディオンのアニメーションに絞り込んだと思います。window.setTimeout(myScrollFunction, 3000)
スクロールを実行する関数を呼び出すために使用すると、それが機能するため、これを理論化します。まるでアニメーションがページのスクロールを妨げているかのようです。これは理にかなっています。
この機能については聞いたことがあり.promise()
ますが、ここでは機能しない可能性があると考えています。私がする必要があるのは、アコーディオン セクションを展開する関数を実行することですが、その中で呼び出されたすべてのアニメーションが終了するまで待ってから、次の関数に進みます。
コードサンプルを貼り付けることができず、テストケースの作成は複雑で時間がかかるため、状況を明確に説明して適切な回答を得られることを願っています.
概念的な例:
私がやりたいことをよりよく理解するために、これを行います。
$(document).ready(function () {
//I want to call ExpandSections() on startup
ExpandSections();
//but I don't want to call ScrollToElement() until
//all accordion sections that were expanded in ExpandSections()
//have finished expanding.
ScrollToElement();
});
function ExpandSections(){
element1.accordion("option", "active", 0);
element2.accordion("option", "active", 0);
element3.accordion("option", "active", 0);
}
function ScrollToElement() {
$('html, body').animate({
scrollTop: ElementToScrollTo.offset().top
}, 1);
}