我创建了一个菜单,当浏览器缩小为移动设备时,该菜单会更改为汉堡导航。问题是,如果我将其调整为移动设备的大小,然后又回到桌面,然后再回到移动设备,菜单将停止工作。

我将在稍后创建一个小提琴,但是没有人能从下面的jQuery中看到为什么会发生这种情况吗?

if(window.innerWidth < 960) {

  jQuery('header nav .main').hide();
  jQuery('header nav .main').removeAttr('style');
  jQuery('header .mob-nav .menu').removeAttr('style');
  jQuery('header .mob-nav .menu').removeClass('selected');

  jQuery('header .mob-nav .menu').on('click', function(){

    if( jQuery(this).hasClass('selected') ) {
      jQuery(this).removeClass('selected');
      jQuery('header nav .main').stop().slideUp()
    } else {
      jQuery(this).addClass('selected');
      jQuery('header nav .main').stop().slideDown();
    }

  });

} else {
  jQuery('header nav .main').removeAttr('style');
}

最佳答案

发生这种情况的原因是,每当窗口大小调整到960像素以下时,都会在“ header .mob-nav .menu”上附加一个单击处理程序。首先使用“ off”取消绑定先前附加的处理程序。尝试将其更改为:

if(window.innerWidth < 960) {

  jQuery('header nav .main').hide();
  jQuery('header nav .main').removeAttr('style');
  jQuery('header .mob-nav .menu').removeAttr('style');
  jQuery('header .mob-nav .menu').removeClass('selected');

  jQuery('header .mob-nav .menu').off('click').on('click', function(){

    if( jQuery(this).hasClass('selected') ) {
      jQuery(this).removeClass('selected');
      jQuery('header nav .main').stop().slideUp();
    } else {
      jQuery(this).addClass('selected');
      jQuery('header nav .main').stop().slideDown();
    }

  });

} else {
  jQuery('header nav .main').removeAttr('style');
}


或者考虑将绑定事件代码放在函数外部。

10-07 19:37
查看更多