1

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);
}
4

1 に答える 1