2016-08-23 103 views
0

我有一个默认隐藏的侧边栏和一个触发边栏的菜单按钮。到目前为止,一切正常,但我想要的是,当我点击菜单时,侧边栏被打开,鼠标离开时,侧边栏被关闭。Javascript onclick菜单按钮显示侧边栏,onmouseleave隐藏侧边栏

我检查了其他解决方案,并试图在我的代码中实现它,但它不工作。

这里是我的HTML和JS

//html 
<div id="wrapper"> 

<!-- sidebar content --> 

    <!-- Menu button --> 
    <div id="page-content-wrapper"> 
     <button type="button" class="hamburger is-closed" data-toggle="offcanvas"> 
      <span class="hamb-top"></span> 
      <span class="hamb-middle"></span> 
      <span class="hamb-bottom"></span> 
     </button> 
    </div> 
</div> 


//js 
<script type="text/javascript"> 
    $(document).ready(function() { 
     var trigger = $('.hamburger'), 
      overlay = $('.overlay'), 
     isClosed = false; 

     trigger.click(function() { 
      hamburger_cross(); 
     }); 

     function hamburger_cross() { 

      if (isClosed == true) {   
      overlay.hide(); 
      trigger.removeClass('is-open'); 
      trigger.addClass('is-closed'); 
      isClosed = false; 
      } else { 
      overlay.show(); 
      trigger.removeClass('is-closed'); 
      trigger.addClass('is-open'); 
      isClosed = true; 
      } 
     } 

     $('[data-toggle="offcanvas"]').click(function() { 
      $('#wrapper').toggleClass('toggled'); 
     }); 
    }); 
</script> 

感谢

+0

仅将相关代码放在此处,而不是在此处倾销整个代码。 –

+0

对不起,我刚刚编辑了该帖子并删除了额外的代码。 –

+0

@KingFaw如果用户没有鼠标,该怎么办?他们如何“放假”?这在平板电脑上如何工作?如果用户只使用键盘,这是如何工作的? – zzzzBov

回答

0

为了结束对鼠标离开你可以写菜单:

$('.navbar').on('mouseleave', function (e) { 
    trigger.click(); // simulate the action you now do to close the menu 
}) 

$(document).ready(function() { 
 
    var trigger = $('.hamburger'), 
 
     overlay = $('.overlay'), 
 
     isClosed = false; 
 

 
    trigger.click(function() { 
 
    hamburger_cross(); 
 
    }); 
 
    $('.navbar').on('mouseleave', function (e) { 
 
    trigger.click(); 
 
    }) 
 

 
    function hamburger_cross() { 
 

 
    if (isClosed == true) { 
 
     overlay.hide(); 
 
     trigger.removeClass('is-open'); 
 
     trigger.addClass('is-closed'); 
 
     isClosed = false; 
 
    } else { 
 
     overlay.show(); 
 
     trigger.removeClass('is-closed'); 
 
     trigger.addClass('is-open'); 
 
     isClosed = true; 
 
    } 
 
    } 
 

 
    $('[data-toggle="offcanvas"]').click(function() { 
 
    $('#wrapper').toggleClass('toggled'); 
 
    }); 
 
});
#wrapper { 
 
    padding-left: 0; 
 
    -webkit-transition: all 0.5s ease; 
 
    -moz-transition: all 0.5s ease; 
 
    -o-transition: all 0.5s ease; 
 
    transition: all 0.5s ease; 
 
} 
 
#wrapper.toggled { 
 
    padding-left: 220px; 
 
} 
 
#sidebar-wrapper { 
 
    z-index: 1000; 
 
    left: 220px; 
 
    width: 0; 
 
    height: 100%; 
 
    margin-left: -220px; 
 
    overflow-y: auto; 
 
    overflow-x: hidden; 
 
    background: #fff; 
 
    -webkit-transition: all 0.5s ease; 
 
    -moz-transition: all 0.5s ease; 
 
    -o-transition: all 0.5s ease; 
 
    transition: all 0.5s ease; 
 
} 
 
#sidebar-wrapper::-webkit-scrollbar { 
 
    display: none; 
 
} 
 
#wrapper.toggled #sidebar-wrapper { 
 
    width: 220px; 
 
} 
 
#page-content-wrapper { 
 
    width: 100%; 
 
} 
 
#wrapper.toggled #page-content-wrapper { 
 
    position: absolute; 
 
    margin-right: -220px; 
 
} 
 
.sidebar-nav { 
 
    position: absolute; 
 
    top: 0; 
 
    width: 220px; 
 
    margin: 0; 
 
    padding: 0; 
 
    list-style: none; 
 
} 
 
.sidebar-nav li { 
 
    position: relative; 
 
    line-height: 20px; 
 
    display: inline-block; 
 
    width: 100%; 
 
} 
 
.sidebar-nav li:before { 
 
    content: ''; 
 
    position: absolute; 
 
    top: 0; 
 
    left: 0; 
 
    z-index: -1; 
 
    height: 100%; 
 
    width: 3px; 
 
    background-color: #fff; 
 
    -webkit-transition: width .2s ease-in; 
 
    -moz-transition: width .2s ease-in; 
 
    -ms-transition: width .2s ease-in; 
 
    transition: width .2s ease-in; 
 
} 
 
.sidebar-nav li:first-child a { 
 
    color: #999; 
 
    background-color: #52b6ec; 
 
} 
 
.sidebar-nav li:nth-child(2):before { 
 
    background-color: #52b6ec; 
 
} 
 
.sidebar-nav li:nth-child(3):before { 
 
    background-color: #52b6ec; 
 
} 
 
.sidebar-nav li:nth-child(4):before { 
 
    background-color: #52b6ec; 
 
} 
 
.sidebar-nav li:nth-child(5):before { 
 
    background-color: #52b6ec; 
 
} 
 
.sidebar-nav li:nth-child(7):before { 
 
    background-color: #52b6ec; 
 
} 
 
.sidebar-nav li:nth-child(8):before { 
 
    background-color: #52b6ec; 
 
} 
 

 
.sidebar-nav li:nth-child(9):before { 
 
    background-color: #52b6ec; 
 
} 
 
.sidebar-nav li:hover:before, 
 
.sidebar-nav li.open:hover:before { 
 
    width: 100%; 
 
    -webkit-transition: width .2s ease-in; 
 
    -moz-transition: width .2s ease-in; 
 
    -ms-transition: width .2s ease-in; 
 
    transition: width .2s ease-in; 
 

 
} 
 
.sidebar-nav li a { 
 
    display: block; 
 
    color: #999; 
 
    text-decoration: none; 
 
    padding: 10px 15px 10px 30px; 
 
} 
 

 
.sidebar-nav li a:hover, 
 
.sidebar-nav li a:active, 
 
.sidebar-nav li a:focus, 
 
.sidebar-nav li.open a:hover, 
 
.sidebar-nav li.open a:active, 
 
.sidebar-nav li.open a:focus { 
 
    color: #fff; 
 
    text-decoration: none; 
 
    background-color: transparent; 
 
} 
 
.sidebar-nav > .sidebar-brand { 
 
    height: 65px; 
 
    font-size: 20px; 
 
    line-height: 44px; 
 
} 
 

 
.sidebar-nav .dropdown-menu { 
 
    position: relative; 
 
    width: 100%; 
 
    padding: 0; 
 
    margin: 0; 
 
    border-radius: 0; 
 
    border: none; 
 
    background-color: #f1f1f1; 
 
    box-shadow: none; 
 
} 
 
.hamburger { 
 
    position: fixed; 
 
    top: 100px; 
 
    z-index: 999; 
 
    display: block; 
 
    width: 32px; 
 
    height: 32px; 
 
    margin-left: 15px; 
 
    background: transparent; 
 
    border: none; 
 
} 
 

 
.hamburger:hover, 
 
.hamburger:focus, 
 
.hamburger:active { 
 
    outline: none; 
 
} 
 

 
.hamburger.is-closed:before { 
 
    content: ''; 
 
    display: block; 
 
    width: 100px; 
 
    font-size: 14px; 
 
    color: #fff; 
 
    line-height: 32px; 
 
    text-align: center; 
 
    opacity: 0; 
 
    -webkit-transform: translate3d(0, 0, 0); 
 
    -webkit-transition: all .35s ease-in-out; 
 
} 
 

 
.hamburger.is-closed:hover:before { 
 
    opacity: 1; 
 
    display: block; 
 
    -webkit-transform: translate3d(-100px, 0, 0); 
 
    -webkit-transition: all .35s ease-in-out; 
 
} 
 

 
.hamburger.is-closed .hamb-top, 
 
.hamburger.is-closed .hamb-middle, 
 
.hamburger.is-closed .hamb-bottom, 
 
.hamburger.is-open .hamb-top, 
 
.hamburger.is-open .hamb-middle, 
 
.hamburger.is-open .hamb-bottom { 
 
    position: absolute; 
 
    left: 0; 
 
    height: 2px; 
 
    width: 100%; 
 
} 
 

 
.hamburger.is-closed .hamb-top, 
 
.hamburger.is-closed .hamb-middle, 
 
.hamburger.is-closed .hamb-bottom { 
 
    background-color: #1a1a1a; 
 
} 
 

 
.hamburger.is-closed .hamb-top { 
 
    top: 5px; 
 
    -webkit-transition: all .35s ease-in-out; 
 
} 
 

 
.hamburger.is-closed .hamb-middle { 
 
    top: 50%; 
 
    margin-top: -2px; 
 
} 
 

 
.hamburger.is-closed .hamb-bottom { 
 
    bottom: 5px; 
 
    -webkit-transition: all .35s ease-in-out; 
 
} 
 

 
.hamburger.is-closed:hover .hamb-top { 
 
    top: 0; 
 
    -webkit-transition: all .35s ease-in-out; 
 
} 
 

 
.hamburger.is-closed:hover .hamb-bottom { 
 
    bottom: 0; 
 
    -webkit-transition: all .35s ease-in-out; 
 
} 
 

 
.hamburger.is-open .hamb-top, 
 
.hamburger.is-open .hamb-middle, 
 
.hamburger.is-open .hamb-bottom { 
 
    background-color: #1a1a1a; 
 
} 
 

 
.hamburger.is-open .hamb-top, 
 
.hamburger.is-open .hamb-bottom { 
 
    top: 50%; 
 
    margin-top: -2px; 
 
} 
 

 
.hamburger.is-open .hamb-top { 
 
    -webkit-transform: rotate(45deg); 
 
    -webkit-transition: -webkit-transform .2s cubic-bezier(.73, 1, .28, .08); 
 
} 
 

 
.hamburger.is-open .hamb-middle { 
 
    display: none; 
 
} 
 

 
.hamburger.is-open .hamb-bottom { 
 
    -webkit-transform: rotate(-45deg); 
 
    -webkit-transition: -webkit-transform .2s cubic-bezier(.73, 1, .28, .08); 
 
} 
 

 
.hamburger.is-open:before { 
 
    content: ''; 
 
    display: block; 
 
    width: 100px; 
 
    font-size: 14px; 
 
    color: #fff; 
 
    line-height: 32px; 
 
    text-align: center; 
 
    opacity: 0; 
 
    -webkit-transform: translate3d(0, 0, 0); 
 
    -webkit-transition: all .35s ease-in-out; 
 
} 
 

 
.hamburger.is-open:hover:before { 
 
    opacity: 1; 
 
    display: block; 
 
    -webkit-transform: translate3d(-100px, 0, 0); 
 
    -webkit-transition: all .35s ease-in-out; 
 
} 
 
.overlay { 
 
    position: fixed; 
 
    display: none; 
 
    width: 100%; 
 
    height: 100%; 
 
    top: 0; 
 
    left: 0; 
 
    right: 0; 
 
    bottom: 0; 
 
    background-color: rgba(250, 250, 250, .8); 
 
    z-index: 1; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 

 
<div id="wrapper"> 
 
    <!-- Sidebar --> 
 
    <nav class="navbar navbar-fixed-top" id="sidebar-wrapper" role="navigation"> 
 
     <ul class="nav navbar-nav sidebar-nav"> 
 
      <div class="gap"><br><br><br></div> 
 
      <li> 
 
       <a href="services.php">Services</a> 
 
      </li> 
 
      <li> 
 
       <a href="#">About</a> 
 
      </li> 
 
      <li> 
 
       <a href="#">Events</a> 
 
      </li> 
 
      <li> 
 
       <a href="#">Team</a> 
 
      </li> 
 
      <li class="dropdown"> 
 
       <a href="#" class="dropdown-toggle" data-toggle="dropdown" style="color:#777;">Works <span 
 
         class="caret"></span></a> 
 
       <ul class="dropdown-menu" role="menu"> 
 
        <li class="dropdown-header">Dropdown heading</li> 
 
        <li><a href="#">Action</a></li> 
 
        <li><a href="#">Another action</a></li> 
 
        <li><a href="#">Something else here</a></li> 
 
        <li><a href="#">Separated link</a></li> 
 
       </ul> 
 
      </li> 
 
      <li> 
 
       <a href="#">Services</a> 
 
      </li> 
 
      <li> 
 
       <a href="#">Contact</a> 
 
      </li> 
 
      <li> 
 
       <a href="index.php#testimonials">Testimonials</a> 
 
      </li> 
 
     </ul> 
 
    </nav> 
 
    <!-- /#sidebar-wrapper --> 
 

 
    <!-- Page Content --> 
 
    <div id="page-content-wrapper"> 
 
     <button type="button" class="hamburger is-closed" data-toggle="offcanvas"> 
 
      <span class="hamb-top"></span> 
 
      <span class="hamb-middle"></span> 
 
      <span class="hamb-bottom"></span> 
 
     </button> 
 
    </div> 
 
</div>

+0

谢谢你帮我解决gaetanoM。 –