ハンバーガーメニュー(途中)
by yshrkn
HTML
<div class="js-menu-icon menu-icon">
<span></span>
<span></span>
<span></span>
</div>
<nav class="js-menu-wrapper menu-wrapper">
<ul class="menu__items">
<li><a href="">menu1</a></li>
<li><a href="">menu2</a></li>
<li><a href="">mwnu3</a></li>
<li><a href="">menu4</a></li>
<li><a href="">menu5</a></li>
</ul>
</nav>
SCSS
.menu {
&-wrapper {
transform: translateX(-1000px);
transition: transform .3s ease-out;
&.active {
transform: translateX(0);
}
}
&__items {
margin-top:60px;
list-style-type: none;
displat: block;
background: #ccc;
padding-left: 0;
}
&-icon {
cursor: pointer;
position: fixed;
top: 10px;
left: 10px;
width: 30px;
height: 30px;
>span {
position: absolute;
height: 2px;
width: 100%;
display: block;
background: #aaa;
transition: transform 0.3s ease-out;
&:nth-child(1) {
top: 0;
}
&:nth-child(2) {
top: 50%;
transform: translateY(-50%);
}
&:nth-child(3) {
bottom: 0;
}
}
&.active {
>span {
&:nth-child(1) {
transform: translateY(14px) rotate(-45deg);
}
&:nth-child(2) {
opacity: 0;
}
&:nth-child(3) {
transform: translateY(-14px) rotate(45deg);
}
}
}
}
}
JavaScript
$(function () {
/* set variables */
var jqueryMap = {
menu: {
$icon: $(".js-menu-icon"),
$menu: $(".js-menu-wrapper")
}
};
var stateMap = {
menu: {
isActive: false
}
};
var configMap = {
menu: {
activeClassName: "active"
}
};
var eventListeners = [{
element: jqueryMap.menu.$icon,
event: "click",
task: function () {
jqueryMap.menu.$icon.toggleClass(configMap.menu.activeClassName);
jqueryMap.menu.$menu.toggleClass(configMap.menu.activeClassName);
}
}];
/**
* Click Manager
*/
var clickManager = (function () {
function init() {}
return {
init: init
};
}());
function addEventListeners() {
eventListeners.forEach(function (obj) {
obj["element"].on(obj.event, obj.task);
}, this);
}
function init() {
addEventListeners();
}
init();
}());