抽屉式侧滑导航是我们常见的一种导航设计,在网页中,尤其是在移动终端设备上,那么,如何通过代码制作出一款非常漂亮的抽屉式侧滑导航菜单呢?本文将介绍三种实现抽屉式导航的方法: 分别是使用 Materialize 和 Simpler Sidebar 这两款 jQuery 插件以及自定义实现抽屉式侧滑导航。
一、通过 Materialize 插件实现
1、引入文件
- <script src="js/jquery.min.js"></script>
- <script src="js/materialize.js"></script>
2、HTML代码
- <ul id="slide-out" class="side-nav">
- <li>
- <div class="userView">
- <div class="background">
- <img src="images/office.jpg">
- </div>
- <a href="#!user"><img class="circle" src="images/yuna.jpg"></a>
- <a href="#!name"><span class="white-text name">张三</span></a>
- <a href="#!email"><span class="white-text email">jdandturk@sina.com</span></a>
- </div>
- </li>
- <li><a href="#!"><i class="material-icons">cloud</i>带图标的第一链接</a></li>
- <li><a href="#!">第二链接</a></li>
- <li>
- <div class="divider">
- </div>
- </li>
- <li><a class="subheader">子标题</a></li>
- <li><a class="waves-effect" href="#!">带波纹效果的第三链接</a></li>
- </ul>
- <a href="#" data-activates="slide-out" class="button-collapse"><i class="material-icons">menu</i></a>
3、jQuery 代码
- $(function() {
- $('.button-collapse').sideNav({
- menuWidth: 300, // Default is 240
- edge: 'right', // Choose the horizontal origin
- closeOnClick: true, // Closes side-nav on <a> clicks, useful for Angular/Meteor
- draggable: true // Choose whether you can drag to open on touch screens
- });
- });
4、参数说明
属性 | 类型 | 默认值 | 说明 |
---|---|---|---|
edge | String | 'left' | Sidenav出现在屏幕位置 |
draggable | Boolean | true | 允许滑动屏幕打开/关闭Sidenav |
inDuration | Number | 250 | 输入转换的长度(毫秒) |
outDuration | Number | 200 | 退出转换的长度(毫秒) |
onOpenStart | Function | null | 当sidenav开始进入时调用的函数 |
onOpenEnd | Function | null | 当sidenav完成输入时调用的函数 |
onCloseStart | Function | null | 当sidenav开始退出时调用的函数 |
onCloseEnd | Function | null | 当sidenav完成退出时调用的函数 |
preventScrolling | Boolean | true | 在sidenav打开时阻止页面滚动 |
5、效果预览
6、示例代码下载
提取码: g42c
二、通过 Simpler Sidebar 插件实现抽屉式侧滑导航
1、引入文件
- <script src="js/jquery.min.js"></script>
- <script src="js/simpler-sidebar.min.js"></script>
2、HTML代码
- <div class="sidebar" id="sucaihuo">
- <div class="sidebar-wrapper" id="sidebar-wrapper">
- <ul class="nav">
- <li><a href="http://www.sucaihuo.com/">sucaihuo</a></li>
- <li><a href="http://www.sucaihuo.com/js">js</a></li>
- <li><a href="http://www.sucaihuo.com/js">素材</a></li>
- <li><a href="http://www.sucaihuo.com/template">模板</a></li>
- <li><a href="http://www.sucaihuo.com/js">联系</a></li>
- </ul>
- </div>
- </div>
3、jQuery 代码
- $(function() {
- $('#sucaihuo').simplerSidebar({
- opener: '#toggle-sidebar',
- sidebar: {
- align: 'left',
- width: 250
- }
- });
- });
4、CSS
- .sidebar-wrapper {
- position: relative;
- height: 100%;
- overflow: auto;
- }
5、参数说明
属性 | 类型 | 默认值 | 说明 |
---|---|---|---|
opener | 字符串 | en | 按钮或图标的选择器,用来触发侧边栏 |
attr | 字符串 | simplersidebar | 为侧边栏添加 data 属性,即默认添加 data-simplersidebar="disabled" data-simplersidebar="active" |
top | 整数 | 0 | 设置侧边栏 top 值 |
animation | 对象 | 动画持续时间及动画方式,默认为: { duration: 500, easing: 'swing' } | |
sidebar | 对象 | 设置侧边栏的属性,如位置、宽度等,默认为: { width: 350, gap: 64, closingLinks: 'a', css: { zIndex: 3000 } } | |
mask | 对象 | 实现显示遮罩及设置遮罩属性:默认为: { display: true, css: { backgroundColor: 'black', opacity: 0.5, filter: 'Alpha(opacity=50)' } } |
6、效果预览
三、自定义抽屉式侧滑导栏
1、修改 function.php 文件
将加载 superfish.js 的代码注释,因为默认的手机菜单动画是通过这个 js 文件来渲染的。
- wp_register_script( 'superfish', get_template_directory_uri() . "/js/superfish.js", array(), version, true );
2、修改 menu.php
位置在:wp-content/themes/begin/template/menu.php,将:
- <a href="#sidr-main" id="navigation-toggle" class="bars"><i class="be be-menu"></i></a>
替换为:
- <a href="#sidr-main" id="navigation-toggle" class="bars"><span></span><span></span><span></span></a>
3、添加 js 内容
- <script type="text/javascript">
- $(function(){
- $("#site-nav-wrap").click(function(){
- if ($(this).find("#navigation-toggle").hasClass("nav-bar-animate")) {
- $(this).find("#navigation-toggle").removeClass("nav-bar-animate");
- $("#site-nav div").removeClass("open-menu-wrap");
- $("body").removeClass("m-nav-show");
- $(".menu-wrap-backdrop").animate({
- opacity: 0
- }, 430, function(){
- $(this).remove();
- });
- } else {
- $(this).find("#navigation-toggle").addClass("nav-bar-animate");
- $("#site-nav div").addClass("open-menu-wrap");
- $("body").addClass("m-nav-show");
- $(this).append("<div class='menu-wrap-backdrop fixed-fluid'></div>");
- }
- });
- });
- </script>
4、添加 css 样式
- @media screen and (max-width:900px){
- #site-nav-wrap{position:absolute;top:0;left:0;height:100%;text-align:center}
- #navigation-toggle span{position:relative;z-index:1;display:block;margin-right:auto;margin-bottom:6px;margin-left:auto;width:20px;height:1px;border-radius:2px;background:#000;transition:transform .5s cubic-bezier(0.77,0.2,0.05,1),background .5s cubic-bezier(0.77,0.2,0.05,1),opacity .55s ease;transition:transform .5s cubic-bezier(0.77,0.2,0.05,1),background .5s cubic-bezier(0.77,0.2,0.05,1),opacity .55s ease,-webkit-transform .5s cubic-bezier(0.77,0.2,0.05,1);transform-origin:20px}
- .nav-bar-animate span{opacity:1;transform:rotate(45deg)}
- .nav-bar-animate span:nth-last-child(3){opacity:1;transform:rotate(-45deg)}
- .nav-bar-animate span:nth-last-child(2){opacity:0}
- #site-nav .down-menu li{float:none;height:40px;font-size:1pc;line-height:40px}
- #site-nav .nav-menu{display:block}
- #menu-box,.nav-search{text-align:center}
- .nav-search{position:absolute;top:0;right:0;width:40px;height:100%}
- #site-nav div{position:fixed;top:0;bottom:0;left:0;z-index:101;overflow:scroll;overflow-x:hidden;padding-top:52px;width:260px;height:-webkit-fill-available;background:#fff;transition:transform .43s cubic-bezier(0.3,0,0,1);transform:translate(-300px, 0)}
- .open-menu-wrap{transform:translate(0, 0)!important}
- #navigation-toggle{margin:0 0 0 10px;width:40px}
- .nav-bar-animate{position:absolute;z-index:1000;text-align:center}
- .menu-wrap-backdrop{background:rgba(0,0,0,.55);animation-name:fadeIn;animation-duration:.43s;animation-timing-function:linear;animation-direction:normal;animation-delay:0s}
- .fixed-fluid{z-index:100;height:-webkit-fill-available}
- .fixed-fluid,.m-nav-show{position:fixed;top:0;right:0;bottom:0;left:0}
- .m-nav-show{width:100%;height:100%}
- }
5、效果预览
自定义实现是以 begin 主题为例的,但代码通用,部分 css 代码是多余的,大家根据实际情况自行调整。
本文已通过「原本」原创作品认证,转载请注明文章出处及链接。