JSFiddle - React, Tailwind, and code Playground
HTML
<!-- MENU -->
<div id="menu">
<a href="#" class="touch-menu"></a>
<nav>
<ul>
<li class="transfer"><a href="#"><span></span>Transfer</a></li>
<li class="history"><a href="#"><span></span>History</a></li>
<li class="log"><a href="#"><span></span>Log In</a></li>
<li class="get"><a href="#"><span></span>Get Pro</a></li>
</ul>
</nav>
</div>
<!-- // MENU -->
CSS
/* ---------------------------------------------------------------------
+ MENU
---------------------------------------------------------------------- */
#menu {
position: fixed;
top: 0;
right: -5px;
width: 0;
height: 100%;
background: #fff;
z-index: 5;
padding-top: 65px;
border-left: 4px solid #4d317d;
}
#menu ul li {
opacity: 0;
border-bottom: 1px solid #e6e6e6;
}
#menu ul li a {
display: block;
background: #fff;
font-size: 21px;
color: #000;
}
#menu ul li a:hover {
color: #7055b2;
text-decoration: none;
}
#menu .input-enter {
padding: 15px 10px;
}
.touch-menu {
display: block;
width: 30px;
height: 30px;
border-radius: 3px;
box-shadow: 0 0 3px rgba(0, 0, 0, .3);
position: fixed;
left: 20px;
top: 20px;
background: rgba(0, 0, 0, .5);
}
JavaScript
/* ----------------------------------------------------
+ MENU
----------------------------------------------------- */
var touchMenu = $('.touch-menu'),
menu = $('#menu'),
airfile = $('#airfile'),
menuLi = menu.find('ul li');
durAnimMenu = 150,
flagMenu = true;
touchMenu.click(function(e) {
e.preventDefault();
if (flagMenu) {
flagMenu = false;
if (!(menu.hasClass('active'))) {
menu.addClass('active').animate({
'width': '200px'
}, 300, function() {
animElemHorizontal(menuLi, durAnimMenu, 'top-down');
});
} else {
menu.removeClass('active');
animElemHorizontal(menuLi, durAnimMenu, 'bottom-up');
}
}
});
airfile.find('.tabs-cont').click(function() {
if (flagMenu) {
if (menu.hasClass('active')) {
menu.removeClass('active');
animElemHorizontal(menuLi, durAnimMenu, 'bottom-up');
}
}
});
function animElemHorizontal(elem, dur, direction) {
if (direction == 'top-down') {
elem.first().animate({
'opacity': 1
}, dur, function() {
if ($(this).next().length) {
animElemHorizontal($(this).next(), durAnimMenu, 'top-down');
} else {
flagMenu = true;
}
});
} else if (direction == 'bottom-up') {
elem.last().animate({
'opacity': 0
}, dur, function() {
if ($(this).prev().length) {
animElemHorizontal($(this).prev(), dur, 'bottom-up');
} else {
flagMenu = true;
menu.animate({
'width': 0,
}, 300);
}
});
}
}