javascript - 为响应式布局隐藏 div 时如何启用菜单单击

标签 javascript jquery css

当调整到平板电脑/手机时,我有一个隐藏子导航菜单 .nav-sub-wrapper 的导航。问题是,由于这个特定的 jQuery 用于在调整大小时隐藏菜单,因此当单击菜单 (.hamburger) 图标时,它会禁止菜单在移动/平板设备上显示。

如何启用 .hamburger 菜单来触发 .nav-sub-wrapper 类在点击时显示?

if($(window).width() <= '768'){
$(".nav-sub-wrapper, .desktop-search-box").hide();
$(".hamburger").on('click', function(){
  if($(".logo-link").css("display") == 'none'){
    $(".hamburger").addClass("hamburger-active");
  }
  $('.list-header').trigger('click');
  $(".nav-sub-wrapper").toggle();
  $(".search").show();
});
}

//used to hide nav on resize//
function navHidden() {
  if ($(window).width() <= 768) {
    $(".nav-sub-wrapper").hide();
    $(".hamburger").on('click', function() {
      $(".nav-sub-wrapper").toggle();
    });
    } else {
      $(".nav-sub-wrapper").show();
    }
  }

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

  $(document).ready(function() {
    navHidden();
  });

最佳答案

我认为您需要确保取消绑定(bind)较早的汉堡包“打开”点击事件。当页面首次全屏加载时,由于您的第一行代码,点击功能被绑定(bind)到“.hamburger”元素。

if($(window).width() <= 768) {
   // Any event bindings you create here will still exist
   // even if you create a new binding somewhere else.
}

如果你调整到桌面模式并且不再满足这个初始条件(屏幕宽度 <= 768)也没关系,这里定义的点击功能仍然绑定(bind)到“.hamburger”元素。

这意味着当您在移动模式下调整大小并单击“.hamburger”时,您将同时运行移动功能和较早的绑定(bind)功能。所以你要切换导航两次,一次打开,一次关闭。这就是您遇到问题的原因。

试试这个:

if ($(window).width() <= 768) {
    //Remove anything still bound from earlier that could be causing a double-fire.
    $(".hamburger").off('click');
    $(".hamburger").on('click', function() {
        $(".nav-sub-wrapper").toggle();
    });
}

希望对您有所帮助,

肖恩

附言:

从长远来看可能想重构为这样的东西,我认为这样更简洁:

function isViewportMobile() {
 if($(window).width() <= 768) {
   return true;
  }
}

$(window).on("resize", function(){
   if (!isViewportMobile()) {
     useDesktopRules();
   } else {
     useMobileRules();
   }
});

useDesktopRules 和 useMobileRules 将包含您之前为每个视口(viewport)提供的 jQuery/dom 操作代码。

Consider using a "throttling / debouncing" function as well ,以防止在调整大小时发生数百万次函数调用。

关于javascript - 为响应式布局隐藏 div 时如何启用菜单单击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37330447/

相关文章:

javascript - backbone.js 模型不触发事件

javascript - 为什么我的 bootstrap 3.7 轮播不工作?

javascript - 在click方法中绑定(bind)事件

html - 创建一个向上打开的下拉菜单

javascript - 当像 new(Date) 这样写时,你如何将参数传递给构造函数?

javascript - body 底色溢出

php - 网络用户界面 : Dynamic Web Forms

javascript - jquery如何访问函数内部的函数

css - 在运行时突出显示行

php - PHP + javascript 世界中的 dot net + flex 是什么?