左側選單欄左滑收起展開效果

介紹了將選單列表上下展開的效果,這裡在上一篇文章的基礎上增加了左右摺疊展開,有時候左側選單可能佔了螢幕的一部分寬度,我們想把左側選單欄收縮起來以此讓右邊可視區域變大,就可以參考這篇文章的效果啦。效果圖如下:

一:頁面結構:
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <div class="window-left"> <div class="go-back"> <a href="javascript:;"> <i class="i-icon"></i> </a> </div> <div class="menu-list"> <ul> <li class="first-menu"> <a href="javascript:;"><i class="i-icon"></i></a> <span class="hover-tit">首頁</span> </li> <li class="first-menu"> <a href="javascript:;"><i class="i-icon"></i></a> <span class="hover-tit">選單1</span> <ul> <li class="second-menu"> <a href="javascript:;">子選單1-1</a> </li> <li class="second-menu"> <a href="javascript:;">子選單1-2</a> </li> <li class="second-menu"> <a href="javascript:;">子選單1-3</a> </li> <li class="second-menu"> <a href="javascript:;">子選單1-4</a> </li> </ul> </li> <li class="first-menu"> <a href="javascript:;"><i class="i-icon"></i></a> <span class="hover-tit">選單2</span> <ul> <li class="second-menu"> <a href="javascript:;">子選單2-1</a> </li> <li class="second-menu"> <a href="javascript:;">子選單2-2</a> </li> <li class="second-menu"> <a href="javascript:;">子選單2-3</a> </li> </ul> </li> <li class="first-menu"> <a href="javascript:;"><i class="i-icon"></i></a> <span class="hover-tit">選單3</span> <ul> <li class="second-menu"> <a href="javascript:;">子選單3-1</a> </li> <li class="second-menu"> <a href="javascript:;">子選單3-2</a> </li> </ul> </li> </ul> </div> </div> </body> </html>
二:頁面樣式css,放在head標籤裡
<style> *{ margin: 0; padding: 0; box-sizing: border-box; -webkit-box-sizing: border-box; } html,body{ height: 100%; } a, a:hover, a:focus { text-decoration: none; color: #262626; } .i-icon{ display: inline-block; } .go-back{ padding-top: 50px; text-align: center; } .window-left.fold{ overflow: visible!important; } .window-left{ position:relative; float:left; width:200px; height:100%; overflow: hidden; background-color: #e8e9ec; } .window-left.fold{ overflow: visible!important; } .window-left .go-back a{ display: inline-block; width: 160px; height: 30px; line-height: 30px; border-radius: 15px; border: solid 1px #7e84b1; text-align: center; } .window-left .go-back a .i-icon{ width: 30px; height: 30px; margin: 0 auto; background-image: url("image/left-arrow.png"); } .window-left.fold .go-back a{ width: 30px; height: 30px; border-radius: 15px; border: solid 1px #7e84b1; } .window-left.fold .go-back a .i-icon{ background-image: url("image/right-arrow.png"); } .window-left .go-back{ text-align: center; } .window-left .menu-list{ padding-top:20px; font-size:18px; } .window-left .menu-list ul{ list-style: none; padding:0; margin:0 auto; } .window-left .menu-list ul li{ text-align:left; color: #616c82; } .window-left .menu-list ul li.first-menu{ position: relative; color: #5f78a2; } .window-left .menu-list>ul>li .i-icon{ width: 24px; height: 24px; vertical-align: sub; background-image: url("image/menu.png"); } .window-left .menu-list ul li:HOVER>span{ color: #1c9dff; cursor: pointer; } .window-left .menu-list ul li a{ display:block; } .window-left .menu-list ul li.first-menu>a{ position: relative; padding-left: 15px; width: 100%; line-height: 50px; white-space: nowrap; } .window-left .menu-list ul li.first-menu .hover-tit{ display: block; position: absolute; left: 55px; top:13px; width: 140px; } .window-left.fold .menu-list ul li.first-menu .hover-tit{ display: none; width: 180px; height: 50px; left: 60px; line-height: 50px; padding-left: 20px; background-color: #bfbcbc; color: #646567; cursor: Default; } .window-left.fold .menu-list ul li.first-menu:hover{ background-color: #bfbcbc; } .window-left.fold .menu-list ul li.first-menu:hover .hover-tit{ display: block!important; top:0; } .window-left.fold .menu-list ul li.first-menu:hover ul{ display: block!important; position: absolute; width: 180px; top:50px; left: 60px; } .window-left.fold .menu-list ul li.first-menu:hover ul li{ height: 45px; border-top: 1px solid #35395f; background-color: #bfbcbc; } .window-left.fold .menu-list ul li.first-menu:hover ul li a{ width: 100%; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } .window-left .menu-list ul li.first-menu.active>span{ color: #1c9dff; } .window-left .menu-list ul li.first-menu.active ul li.second-menu.current a{ background-color: #bfbcbc;; border-left: 4px solid #101213; font-size: 16px; } .window-left .menu-list ul li.first-menu ul{ display:none; } .window-left .menu-list ul li.first-menu ul li.second-menu a{ padding: 12px 0 12px 55px; font-size:16px; color: #28292b; } .window-left.fold .menu-list ul li.first-menu ul li.second-menu a{ padding-left: 20px; font-size:16px; color: #020e23; } </style>
三:js程式碼:
<script type="text/javascript" src="//code.jquery.com/jquery-1.8.2.min.js"></script> <script> $(function(){ $(".menu-list .first-menu").click(function(){ $(this).addClass("active").siblings().removeClass("active"); if(!$(".window-left").hasClass('fold')){ $(this).find("ul").slideToggle(500); $(this).siblings().find("ul").hide(); } }) $(".menu-list .second-menu").click(function(){ var $this = $(this); $(".second-menu").each(function () { if($(this).hasClass("current")){ $(this).removeClass("current"); } }) $this.addClass("current").siblings().removeClass("current"); $this.parents(".first-menu").addClass("active").siblings().removeClass("active") }) /*阻止事件冒泡*/ $(".menu-list .first-menu ul").bind("click",function(event){ event.stopPropagation(); }); $(".go-back a").click(function () { $(".menu-list .first-menu").find("ul").hide(); //收起狀態 if($(".window-left").hasClass('fold')){ $(".window-left").animate({width:"200px"},300,'swing'); $(".window-left").removeClass('fold'); }else{ $(".window-left").animate({width:"60px"},300,'swing'); $(".window-left").addClass('fold') } }) }) </script>
關於選單摺疊收起繫結事件有不明白的可以參考上一篇文章,這裡寫了兩套樣式,因為展開狀態和摺疊狀態下子選單的位置及樣式不一樣,所以當我們點選展開摺疊圖示時新增移除元素類名就可以,並且新增選單欄展開和摺疊寬度變化時的動畫,採用jquery的animate方法。
原文作者技術部落格: https://www.jianshu.com/u/ac4daaeecdfe
95後前端妹子一枚,愛閱讀,愛交友,將工作中遇到的問題記錄在這裡,希望給每一個看到的你能帶來一點幫助。
歡迎留言交流