[解決済み] .animate()のコールバックが2回呼び出される jquery
質問
を追加したので
scrollTop
-アニメーションを追加したので、コールバックのいくつかの部分が2回呼び出されます。
$('html, body').animate({scrollTop: '0px'}, 300,function() {
$('#content').load(window.location.href, postdata, function() {
$('#step2').addClass('stepactive').hide().fadeIn(700, function() {
$('#content').show('slide',800);
});
});
});
を繰り返すだけのようです。
.show()
が繰り返されるだけで、少なくとも私は
load()
または
.fadeIn()
も2回目に呼ばれるようになります。その
.show()
は1回目が終了するとすぐに繰り返される。scrollTop のアニメーション速度を
0
に設定してもダメでした。
animation-queueと関係があるのだと思いますが、回避策が見つからず、特に なぜ が起こっているのかがわかりません。
どのように解決するのですか?
animate
に対して一度だけコールバックを呼び出します。
各要素
を呼び出したセットで
animate
を呼び出します。
が与えられると
start
,step
,progress
,complete
,done
,fail
そしてalways
のコールバックが呼び出されます。 要素ごとに ...
2つの要素をアニメーションさせるので (
html
要素、および
body
要素) の場合、2 つのコールバックが発生します。
(疑問に思う人のために
なぜ
はなぜ 2 つの要素をアニメーション化しているのかと疑問に思う人は、アニメーションが
body
では動作しますが
html
になります)。
を取得するには
シングル
コールバックを取得するために、アニメーションの完了時に
animate
ドキュメントでは
promise
メソッドを使用してアニメーションキューのプロミスを取得し、次に
then
を使用してコールバックをキューに入れます。
$("html, body").animate(/*...*/)
.promise().then(function() {
// Animation complete
});
(注:Kevin B氏からのご指摘 を指摘しました。 を指摘しました。私は4年後にこの指摘がないことに気づき、追記し、そして...ケビンさんの回答を見るまで知りませんでした。彼の答えにふさわしい愛情を注いでください。これは認められた答えなので、そのままにしておくべきだと思いました)。
個々の要素のコールバックと全体の完了コールバックの両方を示す例です。
jQuery(function($) {
$("#one, #two").animate({
marginLeft: "30em"
}, function() {
// Called per element
display("Done animating " + this.id);
}).promise().then(function() {
// Called when the animation in total is complete
display("Done with animation");
});
function display(msg) {
$("<p>").html(msg).appendTo(document.body);
}
});
<div id="one">I'm one</div>
<div id="two">I'm two</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
関連
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] jQueryでチェックボックスに "checked "を設定する
-
[解決済み] jQueryの「exists」関数はありますか?
-
[解決済み] jQueryでページを更新するにはどうすればよいですか?
-
[解決済み] jQueryでテーブルの行を追加する
-
[解決済み] jQueryで要素にスクロールする
-
[解決済み] コールバック内で正しい `this` にアクセスする方法
-
[解決済み] jQueryは要素のレンダリングされた高さを取得しますか?
-
[解決済み] jQueryを使用して配列から特定の値を削除する方法
-
[解決済み】jQueryでチェックボックスがチェックされているかどうかを確認するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] jQueryで要素にスクロールする
-
[解決済み] jQueryでdata属性で要素を選択する
-
[解決済み] jQueryのイベントハンドラを削除する最良の方法?
-
[解決済み] jQuery hasAttrで要素に属性があるかどうかをチェックする【重複あり
-
[解決済み] 変更イベントでradioを使用するには?
-
[解決済み] 既存の非順序型リストにリストアイテムを追加する方法
-
[解決済み] CSSを使用してSVG画像の色を変更する方法(jQuery SVG image replacement)とは?
-
[解決済み] jQueryを使用してspanに値を設定する方法
-
[解決済み] jQueryを使用して文字列から最後の文字を削除する方法は?
-
[解決済み] FirefoxでアニメーションのscrollTopが機能しない