这是一款效果非常炫酷的jQuery和CSS3汉堡包导航菜单打开动画特效。该汉堡包动画中,用户点击汉堡包图标时,图标以弹性变形的方式水平展开。整个动画的特点是弹性十足!
使用方法
HTML结构
该汉堡包菜单展开动画的HTML结构非常简单:使用一个div.menu作为包裹容器,在它里面div.container是汉堡包图标的容器,div.toggle是汉堡包图标,最后的一组<span>元素是隐藏的菜单项。
<div class="menu">
<div class="container">
<div class="toggle"></div>
</div>
<span class="hidden item"><a href="#">首页 </a></span>
<span class="hidden item"><a href="#">最新文章 </a></span>
<span class="hidden item"><a href="#">关于我们 </a></span>
<span class="hidden item"><a href="#">联系我们 </a></span>
</div>
CSS样式
.menu容器被设置了固定的宽度和高度,以及圆角和阴影效果。在菜单展开动画过程中,它的宽度会被修改,这里使用了自定义的贝兹曲线函数来设置它的动画过渡效果。这个贝兹曲线函数是一种带有弹性效果的过渡动画。
.menu {
display: block;
box-sizing: border-box;
background: white;
height: 87.75px;
width: 87.75px;
padding: 36px;
border-radius: 6px;
overflow: hidden;
position: relative;
margin: 30px auto;
box-shadow: 0 8px 22px rgba(0, 0, 0, 0.15);
transition: 1.3s cubic-bezier(0.53, 0, 0.15, 1.3);
}
.menu.expanded {
width: 420px;
}
菜单项开始时是不可见的,并通过nth-of-type为每一个菜单项设置不同的动画延迟时间。
span.hidden {
width: 0;
visibility: hidden;
opacity: 0;
transform: rotateY(90deg);
}
span.hidden:nth-of-type(1) {
transition-delay: .3s;
}
span.hidden:nth-of-type(2) {
transition-delay: .2s;
}
span.hidden:nth-of-type(3) {
transition-delay: .1s;
}
span.hidden:nth-of-type(4) {
transition-delay: 0s;
}
当菜单展开时,各个菜单项上的.hidden class被移除,此时菜单项变为可见状态,同样通过nth-of-type来为各个菜单项设置动画延迟时间。
span.item {
padding: 9px;
white-space: nowrap;
visibility: visible;
opacity: 1;
transition: .3s;
transform: rotateY(0deg);
}
span.item:nth-of-type(1) {
transition-delay: .4s;
}
span.item:nth-of-type(2) {
transition-delay: .5s;
}
span.item:nth-of-type(3) {
transition-delay: .6s;
}
span.item:nth-of-type(4) {
transition-delay: .7s;
}
.toggle用于制作汉堡包图标的水平线条。
.container {
position: absolute;
top: 22.5px;
right: calc(100% - 73.125px);
height: 42.75px;
width: 58.5px;
transition: 1s;
}
.container.close {
right: 0;
}
.toggle {
position: relative;
height: 42.75px;
width: 58.5px;
cursor: pointer;
}
.toggle:after, .toggle:before {
content: '';
background: #1D90F5;
width: 36px;
height: 4.5px;
margin: auto;
position: absolute;
top: 0;
bottom: 0;
right: 0;
left: 0;
transition: 1.3s cubic-bezier(0.53, 0, 0.15, 1.3);
}
.toggle:before {
top: -30%;
}
.toggle:after {
top: 30%;
}
当汉堡包图标被点击之后,它会被添加一个.close class,该class使汉堡包图标的两条线条分别旋转+225度和-225度,组成一个小叉。
.toggle.close:before {
transform: rotate(-225deg);
top: 0;
}
.toggle.close:after {
transform: rotate(225deg);
top: 0;
}
JavaScript
该特效中使用jQuery来监听菜单按钮的点击事件,并为相应的元素添加和移除相应的class类。
$(function(){
$('.toggle').on('click', function() {
$('.menu').toggleClass('expanded');
$('span.item').toggleClass('hidden');
$('.container , .toggle').toggleClass('close');
});
})