アニメーションの後の関数内にあるtoggleClass
が正しくトリガーしていないように見えるのに問題があります。コンソールを見ると、要素menu
が状態を変化させていることがわかります。これにより、すぐにオンとオフの両方を切り替えることができます。スクロールアニメーションが完了すると、toggleClass
が正常に動作します。次のようにJQアニメーションが完了した後にクラスを切り替える
私のスクリプトコードは次のとおりです。promise()
を使用してに関する同様の質問にリンク
$(document).ready(function() {
// initToggle();
stickyNav();
toggleMenu();
});
function stickyNav() {
var navOffset = $('.nav-bar').offset().top;
$(window).scroll(function() {
var nav = $('.nav-bar');
var scroll = $(window).scrollTop();
if (scroll >= navOffset) {
nav.addClass('fixed');
} else {
nav.removeClass('fixed');
}
});
}
function toggleMenu() {
$('.nav-menu').click(function() {
if (!$('.nav-bar').hasClass('fixed')) {
$('html, body').animate({scrollTop: $('.nav-bar').offset().top}, '800',
function() {
$('.menu').toggleClass('active');
$('body').toggleClass('no-scroll');
});
} else {
$('.menu').toggleClass('active');
$('body').toggleClass('no-scroll');
}
});
}
HERE is a "working" codepen of my code which better displays the issue I'm having.
何*正確に*あなたが起こることを期待します:
は、スクリプトは次のようにそれを変更することで動作するようになりましたか?何が起こると予想されているか、何が**起こっているのか、問題を見るために取るべきステップを列挙します。 –私はあなたのアニメーションが2回、 'html'と' body'のために1回発生すると信じています。 – showdev
@showdevまさにそれが問題だったのです。私はそれが二度発射されると言いましたが、かなり理由を理解することはできませんでした。 また、 'when'と' then'に関するあなたの2番目のコメントは本当にきれいです。私はアニメーションを2回呼び出すと、このインスタンスでは完全に必要であるとは確信していませんが、将来的には役立つかもしれません。 ありがとうございました! – ekfuhrmann