导航菜单

汉堡图标菜单列表项动画特效

阿里云


这是一款效果非常炫酷的汉堡包图标变形为菜单列表项动画特效。在这个特效中,用户点击了汉堡包按钮之后,汉堡包图标的线条会变长,之后动画过渡到菜单列表状态。整个转换动画平滑流畅,效果非常酷。

HTML 结构

该汉堡包变形动画特效的基本 HTML 结构如下:

也想出现在这里?联系我们
创客主机
  1. <div class="demo">
  2.   <div class="demo__overlay"></div>
  3.   <div class="demo__menu-btn">
  4.     <div class="demo__menu-btn-line"></div>
  5.     <div class="demo__menu-btn-line"></div>
  6.     <div class="demo__menu-btn-line"></div>
  7.   </div>
  8.   <div class="demo__menu-bg"></div>
  9.   <div class="demo__menu-items">
  10.     <div class="demo__menu-item" data-section="home">Home</div>
  11.     <div class="demo__menu-item" data-section="source">Source of inspiration</div>
  12.     <div class="demo__menu-item" data-section="demos">Other demos</div>
  13.     <div class="demo__menu-item" data-section="about">About</div>
  14.   </div>
  15.   <div class="demo__section demo__section--home active-section">
  16.     <h2 class="demo__section-heading">Home</h2>
  17.     <p class="demo__description">...</p>
  18.   </div>
  19.   <div class="demo__section demo__section--source">
  20.     <h2 class="demo__section-heading">Source of inspiration</h2>
  21.     <p class="demo__description">...</p>
  22.   </div>
  23.   <div class="demo__section demo__section--demos">
  24.     <h2 class="demo__section-heading">Other demos</h2>
  25.     <p class="demo__description">...</p>
  26.   </div>
  27.   <div class="demo__section demo__section--about">
  28.     <h2 class="demo__section-heading">About</h2>
  29.     <p class="demo__description">...</p>
  30.   </div>
  31. </div>

CSS 样式

汉堡包图标有三条线条组成,它们采用绝对定位,设置了 100%父容器的宽度和固定的高度,并对 width 和 transform 属性做了动画过渡设置。

  1. .demo__menu-btn-line {
  2.   position: absolute;
  3.   left: 0;
  4.   width: 100%;
  5.   height: 0.2rem;
  6.   background: #879BAF;
  7.   -webkit-transition: width 0.4s 0.75s, -webkit-transform 0.4s 0.35s;
  8.           transition: width 0.4s 0.75s, transform 0.4s 0.35s;
  9.   -webkit-transform: translate3d(0, 0, 0);
  10.           transform: translate3d(0, 0, 0);
  11. }

在菜单激活状态下,线条的宽度被设置为 26rem,同时设置动画过渡效果。

  1. .demo.menu-active .demo__menu-btn-line {
  2.   width: 26rem;
  3.   -webkit-transition: width 0.4s, -webkit-transform 0.4s 0.32s;
  4.           transition: width 0.4s, transform 0.4s 0.32s;
  5. }

然后分别设置每一条线距离顶部的位置,以及激活状态下移动的距离。

  1. .demo__menu-btn-line:nth-child(1) {
  2.   top: 0;
  3. }
  4. .demo.menu-active .demo__menu-btn-line:nth-child(1) {
  5.   -webkit-transform: translate3d(0, 4rem, 0);
  6.           transform: translate3d(0, 4rem, 0);
  7. }
  8. .demo__menu-btn-line:nth-child(2) {
  9.   top: 0.7rem;
  10. }
  11. .demo.menu-active .demo__menu-btn-line:nth-child(2) {
  12.   -webkit-transform: translate3d(0, 9.5rem, 0);
  13.           transform: translate3d(0, 9.5rem, 0);
  14. }
  15. .demo__menu-btn-line:nth-child(3) {
  16.   top: 1.4rem;
  17. }
  18. .demo.menu-active .demo__menu-btn-line:nth-child(3) {
  19.   -webkit-transform: translate3d(0, 15rem, 0);
  20.           transform: translate3d(0, 15rem, 0);
  21. }

菜单列表项设置固定的高度和字体大小等,初始状态下,它们的透明度为 0,同时设置透明度过渡动画效果和 transform 动画过渡效果。

  1. .demo__menu-item {
  2.   height: 6rem;
  3.   padding-left: 2rem;
  4.   margin-bottom: 0.2rem;
  5.   font-size: 1.8rem;
  6.   line-height: 6rem;
  7.   color: #7F91A4;
  8.   background-color: rgba(127, 145, 164, 0);
  9.   opacity: 0;
  10.   -webkit-transform: translateX(-1rem);
  11.       -ms-transform: translateX(-1rem);
  12.           transform: translateX(-1rem);
  13.   -webkit-transition: opacity 0.2s 0.15s, -webkit-transform 0.2s 0.15s;
  14.           transition: opacity 0.2s 0.15s, transform 0.2s 0.15s;
  15.   cursor: pointer;
  16. }

菜单列表项在被点击的时候会执行 menuItemClicked CSS3 帧动画,被激活的时候,它们的透明度变为 0。translateX(0)用于制作一点菜单项右移的动画效果。

  1. .demo__menu-item.clicked {
  2.   -webkit-animation: menuItemClicked 0.3s;
  3.           animation: menuItemClicked 0.3s;
  4. }
  5. .demo.menu-active .demo__menu-item {
  6.   opacity: 1;
  7.   -webkit-transform: translateX(0);
  8.       -ms-transform: translateX(0);
  9.           transform: translateX(0);
  10. }

然后为每一个菜单项的透明度和 transform 属性设置不同的执行时间,达到动画延迟的效果。

  1. .demo.menu-active .demo__menu-item:nth-child(1) {
  2.   -webkit-transition: opacity 0.2s 0.4s, -webkit-transform 0.2s 0.4s;
  3.           transition: opacity 0.2s 0.4s, transform 0.2s 0.4s;
  4. }
  5. .demo.menu-active .demo__menu-item:nth-child(2) {
  6.   -webkit-transition: opacity 0.2s 0.55s, -webkit-transform 0.2s 0.55s;
  7.           transition: opacity 0.2s 0.55s, transform 0.2s 0.55s;
  8. }
  9. .demo.menu-active .demo__menu-item:nth-child(3) {
  10.   -webkit-transition: opacity 0.2s 0.7s, -webkit-transform 0.2s 0.7s;
  11.           transition: opacity 0.2s 0.7s, transform 0.2s 0.7s;
  12. }
  13. .demo.menu-active .demo__menu-item:nth-child(4) {
  14.   -webkit-transition: opacity 0.2s 0.85s, -webkit-transform 0.2s 0.85s;
  15.           transition: opacity 0.2s 0.85s, transform 0.2s 0.85s;
  16. }

JavaScript

该汉堡包按钮变形动画特效使用 jQuery 来为相应的元素添加和移除相应的 class。

  1. $(document).ready(function () {
  2.     var $demo = $('.demo');
  3.     var menuTextAT = 500;
  4.     $(document).on('click', '.demo__menu-btn', function () {
  5.         $demo.addClass('menu-active');
  6.     });
  7.     $(document).on('click', '.demo__menu-item', function () {
  8.         var $item = $(this);
  9.         var targetSection = $item.data('section');
  10.         $item.addClass('clicked');
  11.         $demo.removeClass('menu-active');
  12.         $('.demo__section.active-section').removeClass('active-section');
  13.         $('.demo__section--' + targetSection).addClass('active-section');
  14.         setTimeout(function () {
  15.             $item.removeClass('clicked');
  16.         }, menuTextAT);
  17.     });
  18. });

汉堡图标菜单列表项动画特效

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

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

发表回复

热销模板

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

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