2017-05-07 16 views
0

私は現在、反応的なナビゲーションを作成中です。私は終了し問題を解決しようとしました。ブラウザのサイズを変更しようとするたびに、toggleClassが複数回トリガーされているようです。ブラウザをリフレッシュすると正常に動作しますが、サイズを変更した後はワンクリックで数回トリガするようです。ブラウザウィンドウのサイズを変更するときにtoggleClassが2回トリガーする

ここに私が取り組んでいるコードがあります。

JSFiddle - https://jsfiddle.net/kvpyzbxr/1/


<script> 

$(document).ready(function() { 

    function detectMobile() { 
     if ($(window).width() < 1080) { 
      $('header').addClass('mobile'); 
      $('.secondary-navigation').insertAfter('.primary-navigation'); 
     } 

     else { 
      $('header').removeClass('mobile'); 
      $('.secondary-navigation').insertBefore('.primary-navigation'); 
     } 

     $('.navigation li').on('click', function() { 
      console.log('open'); 
      $(this).toggleClass('expand-menu'); 
     }) 
    } 

    detectMobile(); 

    $(window).resize(function() { 
     detectMobile(); 
    }) 


}) 


</script> 

header { 
    max-width: 1336px; 
    margin: 0 auto; 
} 

header .navigation { 
    padding: 10px 0; 
    clear: both; 
} 

header .navigation li { 
    padding: 10px; 
    display: inline-block; 
    position: relative; 
    font-family: 'Arial', sans-serif; 
    background-color: #272041; 
    color: #fff; 
    float: left; 
} 

header .navigation li a { 
    color: #fff; 
} 

header .navigation li ul { 
    position: absolute; 
    top: 0; 
    left: 0; 
    padding-top: 30px; 
    display: none; 
} 

header .navigation li ul li { 
    background-color: #231d39; 
    color: #95939e; 
} 

header .navigation li:hover ul { 
    display: block; 
} 

header.mobile .navigation li { 
    display: block; 
    float: none; 
} 

header.mobile .navigation li ul { 
    position: static; 
    display: none; 
    height: 0; 
} 

header.mobile .navigation li.expand-menu ul { 
    height: initial; 
    display: block; 
} 
+0

他人があなたの問題を診断するのを助けるために、あなたのフィドルにjQueryを追加したいかもしれません。 –

+1

'$(document).ready()'の外にresize関数を入れてみてください。 – sideroxylon

答えて

2

あなたは、クリックイベントを数回追加しているためです。 detectMobile()が呼び出されるたびに、クリックイベントを$('.navigation li')にバインドします。だから移動

$('.navigation li').on('click', function() { 
    console.log('open'); 
    $(this).toggleClass('expand-menu'); 
}) 

detectMobile()の機能の外に移動します。

関連する問題