2016-05-26 161 views
1

我遇到了一些我經常用於響應下拉菜單的腳本的麻煩。響應能夠起作用,下拉菜單起作用,鏈接起作用 - 但現在我使用了平滑滾動內部鏈接,並且當單擊內部鏈接時菜單保持打開狀態。它從不與外部鏈接重要,因爲加載新頁面導致菜單重新加載關閉。但現在,通過內部鏈接,菜單保持打開狀態,同時頁面平滑滾動到頁面上的正確位置,覆蓋所有內容。漢堡包菜單點擊關閉

這是我基本的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