2016-05-26 3 views
1

У меня возникли проблемы со сценарием, который я часто использовал для гибкого выпадающего меню. Работа отклика, работа с выпадающими списками, работа с ссылками - но теперь я использую внутренние ссылки smoothscroll, и меню остается открытым, когда нажимается внутренняя ссылка. это никогда не имело значения с внешними ссылками, потому что загрузка новой страницы заставляла меню перезагружать закрытое. Но теперь, используя внутренние ссылки, меню остается открытым, пока страница плавно показывается в нужном месте на странице, охватывая весь контент.Меню гамбургера близко по щелчку

Вот мой основной HTML:

<div id='cssmenu'> 
<ul> 
    <li><a href='#'>Home</a></li> 
     <li class='active'><a href='#'>Products</a> 
      <ul> 
     <li><a href='#'>Product 1</a> 
      <ul> 
       <li><a href='#'>Sub Product</a></li> 
       <li><a href='#'>Sub Product</a></li> 
      </ul> 
     </li> 
     <li><a href='#'>Product 2</a> 
      <ul> 
       <li><a href='#'>Sub Product</a></li> 
       <li><a href='#'>Sub Product</a></li> 
      </ul> 
     </li> 
     </ul> 
    </li> 
    <li><a href='#'>About</a></li> 
    <li><a href='#'>Contact</a></li> 
</ul> 
</div> 

И мой Jquery

(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(){ 

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


}); 
})(jQuery); 

CSS:

/*------------------------------------------------------ 
    Dropdown Menu Styles 
--------------------------------------------------------*/ 

#cssmenu, 
#cssmenu ul, 
#cssmenu ul li, 
#cssmenu ul li a, 
#cssmenu #menu-button { 
    margin: 0; 
    padding: 0; 
    border: 0; 
    list-style: none; 
    line-height: 1; 
    display: block; 
    position: relative; 
    -webkit-box-sizing: border-box; 
    -moz-box-sizing: border-box; 
    box-sizing: border-box; 
} 
#cssmenu ul li a.current { 
    color: #fff; 
} 
#cssmenu:after, 
#cssmenu > ul:after { 
    content: "."; 
    display: block; 
    clear: both; 
    visibility: hidden; 
    line-height: 0; 
    height: 0; 
} 
#cssmenu #menu-button { 
    display: none; 
} 
#cssmenu { 
    width: auto; 
    font-family: 'Open Sans', Helvetica, sans-serif; 
    background: #333; 
} 
#cssmenu.align-center > ul { 
    font-size: 0; 
    text-align: center; 
} 
#cssmenu.align-center ul ul { 
    text-align: left; 
} 
#cssmenu.align-center > ul > li { 
    display: inline-block; 
    float: none; 
} 
#cssmenu.align-right > ul > li { 
    float: right; 
} 
#cssmenu.align-right ul ul { 
    text-align: right; 
} 
#cssmenu > ul > li { 
    float: left; 
} 
#cssmenu > ul > li > a { 
    padding: 15px 15px; 
    font-size: 13px; 
    color: #ffffff; 
    text-transform: uppercase; 
    letter-spacing: 1px; 
    text-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); 
    font-weight: 400; 
    text-decoration: none; 
    -webkit-transition: color .2s ease; 
    -moz-transition: color .2s ease; 
    -ms-transition: color .2s ease; 
    -o-transition: color .2s ease; 
    transition: color .2s ease; 
} 

#cssmenu > ul > li:hover > a, 
#cssmenu > ul > li > a:hover, 
#cssmenu > ul > li.active > a { 
    color: #fff; 
} 
#cssmenu > ul > li.has-sub > a { 
    padding-right: 20px; 
} 
#cssmenu ul > li.has-sub > a:after { 
    content: ''; 
    position: absolute; 
    right: 5px; 
    top: 15px; 
    display: block; 
    width: 18px; 
    height: 18px; 
    -webkit-transition: all 0.1s ease-out; 
    -moz-transition: all 0.1s ease-out; 
    -ms-transition: all 0.1s ease-out; 
    -o-transition: all 0.1s ease-out; 
    transition: all 0.1s ease-out; 
} 
#cssmenu ul > li.has-sub:hover > a:after { 
    background-position: 0 -18px; 
} 
#cssmenu ul > li.has-sub > a:before { 
    content: ''; 
    position: absolute; 
    right: 11px; 
    top: 21px; 
    display: block; 
    width: 0; 
    height: 0; 
    border: 3px solid transparent; 
    border-top-color: #ffffff; 
    z-index: 99; 
} 
#cssmenu ul > li.has-sub:hover > a:before { 
    border-top-color: #888; 
} 
#cssmenu ul ul { 
    position: absolute; 
    left: -9999px; 
    opacity: 0; 
    -webkit-transition: top .2s ease, opacity .2s ease; 
    -moz-transition: top .2s ease, opacity .2s ease; 
    -ms-transition: top .2s ease, opacity .2s ease; 
    -o-transition: top .2s ease, opacity .2s ease; 
    transition: top .2s ease, opacity .2s ease; 
} 
#cssmenu > ul > li > ul { 
    top: 91px; 
    padding-top: 4px; 
} 
#cssmenu > ul > li:hover > ul { 
    left: auto; 
    top: 39px; 
    opacity: 1; 
} 
#cssmenu.align-right > ul > li:hover > ul { 
    right: 0; 
} 
#cssmenu ul ul ul { 
    top: 40px; 
} 
#cssmenu ul ul > li:hover > ul { 
    top: 0; 
    left: 178px; 
    padding-left: 10px; 
    opacity: 1; 
} 
#cssmenu.align-right ul ul > li:hover > ul { 
    left: auto; 
    right: 178px; 
    padding-left: 0; 
    padding-right: 10px; 
    opacity: 1; 
} 
#cssmenu ul ul li a { 
    width: 180px; 
    padding: 12px 25px; 
    font-size: 13px; 
    border-bottom: solid 1px #888; 
    font-weight: 700; 
    color: #A82923; 
    text-decoration: none; 
    background: #ffffff; 
    -webkit-transition: color .2s ease; 
    -moz-transition: color .2s ease; 
    -ms-transition: color .2s ease; 
    -o-transition: color .2s ease; 
    transition: color .2s ease; 
} 
#cssmenu ul ul li:hover > a, 
#cssmenu ul ul li > a:hover, 
#cssmenu ul ul li.active > a { 
    color: #888; 
} 
#cssmenu ul ul li:first-child > a { 

} 
#cssmenu ul ul li:last-child > a { 
    border-bottom-left-radius: 0px; 
    border-bottom-right-radius: 0px; 
    border-bottom: solid 1px #888; 
} 
#cssmenu ul ul > li.has-sub > a:after { 
    right: 12px; 
    top: 9.5px; 
    background: #A82923; 
} 
#cssmenu.align-right ul ul > li.has-sub > a:after { 
    right: auto; 
    left: 12px; 
} 
#cssmenu ul ul > li.has-sub:hover > a:after { 
    background-position: 0 -18px; 
} 
#cssmenu ul ul > li.has-sub > a:before { 
    top: 15.5px; 
    right: 16px; 
    border-top-color: transparent; 
    border-left-color: #ffffff; 
} 
#cssmenu.align-right ul ul > li.has-sub > a:before { 
    top: 15.5px; 
    right: auto; 
    left: 16px; 
    border-top-color: transparent; 
    border-right-color: #ffffff; 
    border-left-color: transparent; 
} 
#cssmenu ul ul > li.has-sub:hover > a:before { 
    border-top-color: transparent; 
    border-left-color: #1c89b5; 
} 
#cssmenu.align-right ul ul > li.has-sub:hover > a:before { 
    border-top-color: transparent; 
    border-left-color: transparent; 
    border-right-color: #1c89b5; 
} 
@media all and (max-width: 768px), only screen and (-webkit-min-device- pixel-ratio: 2) and (max-width: 1024px), only screen and (min--moz-device-pixel-ratio: 2) and (max-width: 1024px), only screen and  (-o-min-device-pixel-ratio: 2/1) and (max-width: 1024px), only screen and (min-device-pixel-ratio: 2) and (max-width: 1024px), only screen and (min-resolution: 192dpi) and (max-width: 1024px), only screen and (min-resolution: 2dppx) and (max-width: 1024px) { 
    #cssmenu { 
    width: 100%; 
    } 
    #cssmenu ul, 
    #cssmenu ul ul, 
    #cssmenu ul ul ul, 
    #cssmenu > ul, 
    #cssmenu.align-center > ul, 
    #cssmenu > ul > li > ul, 
    #cssmenu > ul > li:hover > ul, 
    #cssmenu ul ul li:hover > ul, 
    #cssmenu ul ul ul li:hover > ul, 
    #cssmenu.align-right ul ul, 
    #cssmenu.align-right ul ul li:hover > ul, 
    #cssmenu.align-right ul ul ul li:hover > ul { 
    position: relative; 
    left: 0; 
    right: auto; 
    top: 0; 
    width: 100%; 
    display: none; 
    padding: 0; 
    opacity: 1; 
    text-align: left; 
    } 
    #cssmenu ul li { 
    width: 100%; 
    border-top: 1px solid rgba(120, 120, 120, 0.2); 
    } 
    #cssmenu > ul > li > a, 
    #cssmenu ul ul li a, 
    #cssmenu ul ul li:first-child > a, 
    #cssmenu ul ul li:last-child > a { 
    width: 100%; 
    border-radius: 0; 
    box-shadow: none; 
    background: none; 
    } 
    #cssmenu ul li a { 
    padding-left: 12.5px; 
    } 
    #cssmenu ul ul li a { 
    padding: 14px 25px 14px 27.5px; 
    } 
    #cssmenu ul ul ul li a { 
    padding-left: 42.5px; 
    } 
    #cssmenu ul ul ul ul li a { 
    padding-left: 57.5px; 
    } 
    #cssmenu > ul > li.has-sub > a:after, 
    #cssmenu > ul > li.has-sub > a:before, 
    #cssmenu ul ul li.has-sub > a:after, 
    #cssmenu ul ul li.has-sub > a:before { 
    display: none; 
    } 
    #cssmenu #menu-button { 
    position: relative; 
    display: block; 
    padding: 20px; 
    padding-left: 12.5px; 
    cursor: pointer; 
    font-size: 13px; 
    color: #ffffff; 
    text-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); 
    font-weight: 700; 
    letter-spacing: 1px; 
    text-transform: uppercase; 
    } 
    #cssmenu .submenu-button { 
    position: absolute; 
    right: 0; 
    display: block; 
    width: 53px; 
    height: 53px; 
    border-left: 1px solid rgba(120, 120, 120, 0.2); 
    z-index: 10; 
    cursor: pointer; 
    } 
    #cssmenu ul ul .submenu-button { 
    height: 41px; 
    } 
    #cssmenu ul .submenu-button:after, 
    #cssmenu #menu-button:after { 
    content: ''; 
    position: absolute; 
    right: 12.5px; 
    top: 12.5px; 
    display: block; 
    width: 28px; 
    height: 28px; 
    border-radius: 15px; 
    background: #3db2e1; 
    background: -webkit-linear-gradient(top, #58bde5 0%, #4ab7e3 25%,  #2babde 50%, #58bde5 75%, #4ab7e3 100%); 
    background: -ms-linear-gradient(top, #58bde5 0%, #4ab7e3 25%,  #2babde 50%, #58bde5 75%, #4ab7e3 100%); 
    background: -moz-linear-gradient(top, #58bde5 0%, #4ab7e3 25%,  #2babde 50%, #58bde5 75%, #4ab7e3 100%); 
    background: -o-linear-gradient(top, #58bde5 0%, #4ab7e3 25%, #2babde  50%, #58bde5 75%, #4ab7e3 100%); 
    background: linear-gradient(to bottom, #58bde5 0%, #4ab7e3 25%,  #2babde 50%, #58bde5 75%, #4ab7e3 100%); 
    box-shadow: inset 0 -1px 1px #209ed0, inset 0 2px 1px #7fcceb; 
    background-size: 56px 56px; 
    background-position: 0 0; 
    background-repeat: no-repeat; 
    -webkit-transition: all 0.1s ease-out; 
    -moz-transition: all 0.1s ease-out; 
    -ms-transition: all 0.1s ease-out; 
    -o-transition: all 0.1s ease-out; 
    transition: all 0.1s ease-out; 
    } 
    #cssmenu ul .submenu-button.submenu-opened:after, 
    #cssmenu #menu-button.menu-opened:after { 
background-position: 0 -28px; 
    } 
    #cssmenu ul ul .submenu-button:after { 
    top: 6.5px; 
    } 
    #cssmenu #menu-button:before, 
    #cssmenu .submenu-button:before { 
    content: ''; 
    position: absolute; 
    right: 22.5px; 
    top: 25.5px; 
    display: block; 
    width: 0; 
    height: 0; 
    border: 4px solid transparent; 
    border-top-color: #ffffff; 
    z-index: 99; 
    } 
    #cssmenu ul ul .submenu-button:before { 
    top: 19.5px; 
    } 
    #cssmenu #menu-button.menu-opened:before, 
    #cssmenu .submenu-button.submenu-opened:before { 
    border-top-color: #19799f; 
    } 
} 

Есть ли что-то мне нужно добавить для того, чтобы в меню, чтобы закрыть снова после нажатия ссылки? Любая помощь будет принята с благодарностью!

+0

где ваш css? – mlegg

+0

Я добавил CSS - не могли бы вы еще раз взглянуть? – graphicfixations

ответ

0

Поскольку он добавляет и удаляет класс и вызывает CSS, нам нужно увидеть CSS.

Остальная часть кода покажет всем, кто смотрит на этот пост, какие возможные решения существуют.

+0

Обновлено исходное сообщение, чтобы включить CSS – graphicfixations

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