【问题标题】:mobile hamburger for mobile not closing移动汉堡不关闭
【发布时间】:2023-03-21 07:40:02
【问题描述】:

我对这段代码有 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);

【问题讨论】:

  • 我已经尝试了所有这些选项,但第二个问题仍然存在问题:(

标签: javascript jquery css function


【解决方案1】:

问题在于您的 CSS 样式。你的下拉菜单有一个填充顶部。你可以在这里找到填充 #cssmenu > ul。菜单未关闭的原因是单击未在您的 x 图标上触发,而是在您的下拉 div 上。将填充更改为边距,这会将整个 div 移到应该可以工作的下方。

【讨论】:

  • 谢谢。它对第一个问题进行了排序,但仍在为第二个问题苦苦挣扎
【解决方案2】:

因为在移动视图中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);

【讨论】:

  • 谢谢。它对第一个问题进行了排序,但仍在为第二个问题苦苦挣扎
猜你喜欢
  • 2016-07-08
  • 2021-01-24
  • 2016-09-24
  • 2019-04-05
  • 2021-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多