移动汉堡包无法关闭

时间:2019-06-18 10:19:20

标签: javascript jquery css function

此代码有2个问题:

  1. 当移动设备上的子菜单下拉时,“ X”不会将其关闭
  2. 我使用子级别中的锚链接(#)对问题进行了排序。他们关闭了下拉菜单,但没有将“ X”改回“汉堡”

在此先感谢您的帮助。临时文件是这个文件:http://www.un-poco.com/navtemp

(function($) {
  $.fn.menumaker = function(options) {
    var cssmenu = $(this),
      settings = $.extend({
        title: "Menu",
        format: "dropdown",
        sticky: false
      }, options);

    return this.each(function() {
      cssmenu.prepend('<div id="menu-button">' + settings.title + '</div>');
      $(this).find("#menu-button").on('click', function() {
        $(this).toggleClass('menu-opened');
        var mainmenu = $(this).next('ul');
        if (mainmenu.hasClass('open')) {
          mainmenu.hide().removeClass('open');
        } else {
          mainmenu.show().addClass('open');
          if (settings.format === "dropdown") {
            mainmenu.find('ul').show();
          }
        }
      });

      cssmenu.find('li ul').parent().addClass('has-sub');

      multiTg = function() {
        cssmenu.find(".has-sub").prepend('<span class="submenu-button"></span>');
        cssmenu.find('.submenu-button').on('click', function() {
          $(this).toggleClass('submenu-opened');
          if ($(this).siblings('ul').hasClass('open')) {
            $(this).siblings('ul').removeClass('open').hide();
          } else {
            $(this).siblings('ul').addClass('open').show();
          }
        });
      };

      if (settings.format === 'multitoggle') 
        multiTg();
      else 
        cssmenu.addClass('dropdown');

      if (settings.sticky === true) 
        cssmenu.css('position', 'fixed');

      resizeFix = function() {
        if ($(window).width() > 768) {
          cssmenu.find('ul').show();
        }

        if ($(window).width() <= 768) {
          cssmenu.find('ul').hide().removeClass('open');
        }
      };
      resizeFix();
      return $(window).on('resize', resizeFix);
    });
  };
})(jQuery);

(function($) {
  $(document).ready(function() {
    if ($(window).width() <= 768) {
      $('#cssmenu  ul ul li').on('click', function() {
        $("#cssmenu ul").hide();
      });
    }

    $("#cssmenu").menumaker({
      title: "",
      format: "multitoggle"
    });
  });
})(jQuery);

2 个答案:

答案 0 :(得分:0)

问题在于您的CSS样式。您的下拉菜单顶部有一个填充。您可以在 #cssmenu> ul 中找到填充。菜单未关闭的原因是未在x图标上触发点击,而是在下拉div上触发了该点击。将padding更改为margin,这会将整个div移到应该起作用的水平。

答案 1 :(得分:0)

由于在移动视图ul中的下拉列表已移至汉堡菜单,因此您的点击事件不会触发。 尝试使用边距代替ul样式中的填充。参见下面的代码-

CSS-

#cssmenu > ul {
    margin-top: 43px;
    float: right;
}

要返回下拉菜单上的汉堡包图标,只需更改您的#menu-button类,如下面的代码-

JS代码-

(function($) {
  $(document).ready(function() {
    if ($(window).width() <= 768) {
      $('#cssmenu  ul ul li').on('click', function() {
        // add this line only in your code might be solve your issue
        $('#cssmenu').find('#menu-button').addClass('menu-opened').removeClass('menu-closed'); 
        $("#cssmenu ul").hide();
      });
    }

    $("#cssmenu").menumaker({
      title: "",
      format: "multitoggle"
    });
  });
})(jQuery);