ページを特定の要素にスクロールした後、その要素にクラスを追加する必要があります。問題は、完全な関数がスクロールアニメーションの完了前に起動するため、間違った要素がクラスを取得することです。私はsetTimeout()
で完全な関数をラップするとうまくいきます。jQuery animate()の完了関数は完了前に起動します
なぜ完全な機能が完了する前に起動しますか?それは既知の問題ですか?この問題を解決する最も信頼できる方法は何ですか?
マイコード:
$('html, body').animate({
scrollTop: current_element_position + 'px'
}, 'fast', function(){
current_element.addClass('current_element');
});
ここで確認することができますあなたは、アニメーション機能のための高速な引数を書きました。ここでは、高速、中、低の3つのオプションがあります。したがって、それぞれには効果を完了するための一定の時間があります。しかし、JavaScriptは非同期であるため、次のアクションの開始を待つことはありません。 1つのアクションが実行時間よりも時間がかかる場合、次のコードは実行を開始します。 –
あなたが言うことが正しければ、なぜ彼らはhttp://api.jquery.com/animate/で完全な機能を「完全」と呼んだのですか?関数が実際に完了する前に起動するケースがある場合、その用語はかなり誤解を招くようです。 – drake035
あなたは正しいです。しかし、あなたはこれを考慮する必要があり、あなたが言ったように、タイムアウトを設定するとあなたに役立つだろう。 –