导航菜单

带隐藏侧边栏的垂直多面板UI界面布局

阿里云


这是一款使用 jQuery 和 CSS3 制作的带隐藏侧边栏的垂直多面板 UI 界面布局。这个 UI 界面使用汉堡包图标作为隐藏菜单触发按钮,点击它时菜单会从上往下滑出。点击相应的菜单项可以直接跳转到相应的面板上。另外也可以通过鼠标上下滚动来切换到各个面板。

HTML 结构

导航菜单放置在一个<nav>元素中,.burger 元素是汉堡包图标,汉堡包的线条有伪元素来制作,以便于制作汉堡包图标动画。菜单项有一组无序列表组成。

也想出现在这里?联系我们
创客主机
  1. <nav class="nav">
  2.   <div class="burger">
  3.     <div class="burger__patty"></div>
  4.   </div>
  5.  
  6.   <ul class="nav__list">
  7.     <li class="nav__item">
  8.       <a href="#1" class="nav__link c-blue"><i class="fa fa-camera-retro"></i></a>
  9.     </li>
  10.     <li class="nav__item">
  11.       <a href="#2" class="nav__link c-yellow scrolly"><i class="fa fa-bolt"></i></a>
  12.     </li>
  13.     <li class="nav__item">
  14.       <a href="#3" class="nav__link c-red"><i class="fa fa-music"></i></a>
  15.     </li>
  16.     <li class="nav__item">
  17.       <a href="#4" class="nav__link c-green"><i class="fa fa-paper-plane"></i></a>
  18.     </li>
  19.   </ul>
  20. </nav>

页面的每一个面板由一个 section.panel 制作。

  1. <section class="panel">
  2.   <article class="panel__wrapper">
  3.     <div class="panel__content">
  4.       // content here
  5.      </div>
  6.   </article>
  7. </section>

CSS 样式

汉堡包导航使用 position: fixed 将它固定在页面的左上角。菜单中的无序列表初始化时使用 translateY:-100%;将其隐藏,当汉堡包图标被点击时,在将它移动会屏幕中。

  1. .nav {
  2.   position: fixed;
  3.   z-index: 1;
  4.   top: 0;
  5.   left: 0;
  6.   width: 100px;
  7.   -webkit-backface-visibility: hidden;
  8.           backface-visibility: hidden;
  9. }
  10. .nav__list {
  11.   display: -webkit-box;
  12.   display: -webkit-flex;
  13.   display: -ms-flexbox;
  14.   display: flex;
  15.   -webkit-flex-flow: column wrap;
  16.       -ms-flex-flow: column wrap;
  17.           flex-flow: column wrap;
  18.   height: 85vh;
  19.   -webkit-transform: translate(0, -100%);
  20.       -ms-transform: translate(0, -100%);
  21.           transform: translate(0, -100%);
  22.   -webkit-transition: all 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275);
  23.           transition: all 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275);
  24. }
  25. .nav__list--active {
  26.   -webkit-transform: translate(0, 0);
  27.       -ms-transform: translate(0, 0);
  28.           transform: translate(0, 0);
  29. }

每一个内容面板 section.panel 都设置了最小高度 min-height: 100vh;,使它们可以填满整个视口。每一个面板中的内容布局都使用 flexbox 来制作,类似下面的样子:

  1. .panel {
  2.   // ...
  3.   display: flex;
  4.   align-items: center; // 垂直居中
  5.   justify-content: center; // 水平居中
  6. }

JAVASCRIPT

在 jQuery 代码中,对于汉堡包导航只是简单的在它被点击时切换它的 class。

  1. var menu = document.querySelector('.nav__list');
  2.   var burger = document.querySelector('.burger');              
  3. var openMenu = function () {
  4.     burger.classList.toggle('burger--active');
  5.     menu.classList.toggle('nav__list--active');
  6. };

每一个 section 中的内容在切换到该 section 时都带有一些动画效果。这是通过比较 section.panel 元素的$(document).scrollTop()值和.offset().top 值来实现的。当.offset().top 值小于$(document).scrollTop()值的时候,就为这个 section 的内容添加一个指定的 class,使内容产生动画效果。否则,将这个 class 移除。

  1. var scrollFx = function () {
  2.       var ds = doc.scrollTop();
  3.       var of = vh / 4;
  4.       for (var i = 0; i < panel.length; i++) {
  5.           if (window.CP.shouldStopExecution(1)) {
  6.               break;
  7.           }
  8.           if (panel.eq(i).offset().top < ds + of) {
  9.               panel.eq(i).find('.panel__content').addClass('panel__content--active');
  10.           } else {
  11.               panel.eq(i).find('.panel__content').removeClass('panel__content--active');
  12.           }
  13.       }
  14.       window.CP.exitedLoop(1);
  15.   };
  16.   var scrolly = function (e) {
  17.       e.preventDefault();
  18.       var target = this.hash;
  19.       var $target = $(target);
  20.       $('html, body').stop().animate({ 'scrollTop': $target.offset().top }, 300, 'swing', function () {
  21.           window.location.hash = target;
  22.       });
  23.   };
  24.   var init = function () {
  25.       burger.addEventListener('click', openMenu, false);
  26.       window.addEventListener('scroll', scrollFx, false);
  27.       window.addEventListener('load', scrollFx, false);
  28.       $('a[href^="#"]').on('click', scrolly);
  29.   };

带隐藏侧边栏的垂直多面板 UI 界面布局

已有 436 人购买
查看演示升级 VIP立刻购买

演示地址 下载地址
收藏
(0)

发表回复

热销模板

Ashade - 作品展示摄影相册WordPress汉化主题
LensNews

本站承接 WordPress / PbootCMS / DedeCMS 等
系统建站、仿站、开发、定制等业务!