单击另一个时关闭手风琴项目

时间:2017-12-18 19:41:10

标签: javascript jquery css toggle

以下是jsfiddle

上的工作示例

我试图添加一个片段,以便在单击一个时关闭打开的手风琴项目。我已经添加了一个“打开”类,但是当单击另一个时,似乎无法删除该类。

目前它们都可以打开,但我希望防止这种情况发生,因为它会占用移动设备上太多空间并迫使背景滚动,这也会导致导航崩溃。

$( document ).ready(function() {


    // header js
        (function($) {
        $.fn.menumaker = function(options) {  
         var cssmenu = $(this), settings = $.extend({
           format: "dropdown",
         }, options);
         return this.each(function() {
           $(this).find(".hamburger-button").on('click', function(){
             $(this).toggleClass('menu-opened');
             var mainmenu = $(this).next('ul');
             if (mainmenu.hasClass('open')) { 
               mainmenu.slideToggle().removeClass('open');
             }
             else {
               mainmenu.slideToggle().addClass('open');
               if (settings.format === "dropdown") {
                 mainmenu.find('ul').show();
               }
             }
           });
           cssmenu.find('li ul').parent().addClass('has-sub');
           
           

          

          $('#cssmenu li.active').addClass('open').children('ul').show();
            $('#cssmenu li.has-sub>a').on('click', function(){
              $(this).removeAttr('href');
              var element = $(this).parent('li');
              if (element.hasClass('open')) {
                element.removeClass('open');
                element.find('li').removeClass('open');
                element.find('ul').slideUp(200);
              }
              else {
                element.addClass('open');
                element.children('ul').slideDown(200);
                element.siblings('li').children('ul').slideUp(200);
                element.siblings('li').removeClass('open');
                element.siblings('li').find('li').removeClass('open');
                element.siblings('li').find('ul').slideUp(200);
              }
            });

        

      /*
           
          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('.has-sub').hasClass('open')) {
                 $(this).siblings('ul').removeClass('open').slideToggle();
               }
               else {
                 $(this).siblings('ul').addClass('open').slideToggle();
               }
             });
           };
      */     
      
     
           if (settings.format === 'multitoggle') multiTg();
           else cssmenu.addClass('dropdown');
           
           
           
        resizeFix = function() {
          var mediasize = 1000;
             if ($( window ).width() > mediasize) {
               cssmenu.find('ul').show();
             }
             if ($(window).width() <= mediasize) {
               cssmenu.find('ul').hide().removeClass('open');
             }
           };
           resizeFix();
           return $(window).on('resize', resizeFix);
         });
          };
        })($);

        (function($){
        $(document).ready(function(){
        $("#cssmenu").menumaker({
           format: "multitoggle"
        });
        });
        })($);


});

1 个答案:

答案 0 :(得分:1)

这样的事情怎么样:

      cssmenu.children().forEach(function(elem){
         if(elem === mainmenu){
           continue;
         }
         elem.removeClass('open');
      });
      mainmenu.slideToggle().addClass('open');
      if (settings.format === "dropdown") {
        mainmenu.find('ul').show();
      }

在添加open类之前,从所有其他元素中清除它。