2016-09-07 12 views
1

アニメーションの後の関数内にある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.

+0

何*正確に*あなたが起こることを期待します:

は、スクリプトは次のようにそれを変更することで動作するようになりましたか?何が起こると予想されているか、何が**起こっているのか、問題を見るために取るべきステップを列挙します。 –

+0

私はあなたのアニメーションが2回、 'html'と' body'のために1回発生すると信じています。 – showdev

+0

@showdevまさにそれが問題だったのです。私はそれが二度発射されると言いましたが、かなり理由を理解することはできませんでした。 また、 'when'と' then'に関するあなたの2番目のコメントは本当にきれいです。私はアニメーションを2回呼び出すと、このインスタンスでは完全に必要であるとは確信していませんが、将来的には役立つかもしれません。 ありがとうございました! – ekfuhrmann

答えて

0

@showdev。

function toggleMenu() { 
    $('.nav-menu').click(function() { 
     if (!$('.nav-bar').hasClass('fixed')) { 
      $('html, body').animate({scrollTop: $('.nav-bar').offset().top}, '800').promise().done(function() { 
       $('.menu').toggleClass('active'); 
       $('body').toggleClass('no-scroll'); 
      }); 
     } else { 
      $('.menu').toggleClass('active'); 
      $('body').toggleClass('no-scroll'); 
     } 
    }); 
} 
+0

[this post](http://stackoverflow.com/questions/19303405/difference-between-html-body-animate-and-body-animate)によれば、セレクタの1つだけを使用するとブラウザの互換性の問題が発生することがあります。 – showdev

+0

ええ、私はあなたが提案したリンクを使って 'promise()'を使って動作させました。私はあなたの複製を正しい答えとしてマークします。再度、感謝します! – ekfuhrmann

関連する問題