2016-09-05 2 views
0

новичок здесь),
Я использую bootsnav для создания бокового меню с помощью кнопки переключения. Я хочу, чтобы он закрылся, если пользователь щелкнул в другом месте из меню, но я не могу заставить его работать. Я попробовал несколько решений, которые я нашел на форумах (их много, правда), но ничего. Я попытался сделать что-то вроде this с jQuery, используя toggleClass и removeClass, но лучшая попытка привела к тому, что меню не открылось, потому что класс переключения запускался и не запускался одновременно.Закрыть боковое меню ботинка на странице нажмите

Это код, который вызывает меню:

$("nav.navbar.bootsnav .attr-nav").each(function(){ 
      $("li.side-menu > a", this).on("click", function(e){ 
       e.preventDefault(); 
       $("nav.navbar.bootsnav > .side").toggleClass("on"); 
       $("body").toggleClass("on-side"); 
      }); 
     }); 
     $(".side .close-side").on("click", function(e){ 
      e.preventDefault(); 
      $("nav.navbar.bootsnav > .side").removeClass("on"); 
      $("body").removeClass("on-side"); 
     }); 

Может кто-нибудь помочь, пожалуйста?

+0

Ну, они оба активируются, потому что вы нажимаете на них обоих, нет? при быстром просмотре структуры bootsnav я вижу, что .side .close-side - это в основном оболочка для элементов привязки. Для вашего случая быстрое исправление для этого было бы определить переменную, это боковая панель открыта или закрыта, и проверьте ее перед удалением/переключением классов. –

ответ

0

Вы можете создать какой-то элемент на вашей HTML в качестве наложения фона для меню и показать его, когда меню стороны шоу, и скрыть его, когда меню стороны скрыть как этот

$("nav.navbar.bootsnav .attr-nav").each(function(){ 
    $("li.side-menu > a", this).on("click", function(e){ 
     e.preventDefault(); 
     $("nav.navbar.bootsnav > .side").toggleClass("on"); 
     $("body").toggleClass("on-side"); 

     $(".overlay-menu").fadeIn(); 
    }); 
}); 
$(".side .close-side").on("click", function(e){ 
    e.preventDefault(); 
    $("nav.navbar.bootsnav > .side").removeClass("on"); 
    $("body").removeClass("on-side"); 

    $(".overlay-menu").fadeOut(); 
}); 

Тогда вы можете создать .overlay -menu как событие закрытия для .side-меню, как этот .overlay меню

$(".overlay-menu").on("click", function(e){ 
    e.preventDefault(); 
    $("nav.navbar.bootsnav > .side").removeClass("on"); 
    $("body").removeClass("on-side"); 

    $(this).fadeOut(); 
}); 

набора на вашем CSS, как этот

.overlay-menu{ 
    position:fixed; 
    display:block; 
    height:100%; 
    width:100%; 
    z-index: (less from side-menu) 
} 

Надеюсь, что это поможет вам

+0

Я пометил ее как правильную после нескольких месяцев, она полностью сошла с ума! В любом случае, вы очень помогли, спасибо! – Aranarth

Смежные вопросы