pagetop

BLOG

【js】ハンバーガーメニューをボトムナビゲーションにする

  • HOME

  • BLOG

  • 【js】ハンバーガーメニューをボトムナビゲーションにする

Article

【js】ハンバーガーメニューをボトムナビゲーションにする

javascript

ハンバーガーメニューもすでにスタンダードなテクニックになってひさしいいですが、ポジションは左上か右上が多いですが、スマホ画面が大きくなるにつれ、意外と上にあるって不便だな〜と感じることもたまにあったので、今回ボトムナビゲーションとして配置してみました。
どうせなら、ちょっとお洒落にとメニュー展開をフワッとした感じでアニメーションしたのでメモします。

 

ハンバーガーメニューをボトムナビゲーションにする

 

プラグインを設置する

定番のjQueryを用意し、ギミック部分nになるfunction.js(後述)を設置します。

<script src='https://code.jquery.com/jquery-3.3.1.min.js'></script>
<script src="js/function.js"></script>

 

html

ハンバーガーメニュー部分のhtmlです。

<div class="hamburger"><span></span><span></span><span></span></div>
<nav id="nav">
<div id="nav-list">
<ul>
<li><a href="#">Top</a></li> 
<li><a href="#">About</a></li> 
<li><a href="#">Service</a></li> 
<li><a href="#">Contact</a></li> 
</ul>
</div>
</nav>
<div class="bg-circle"></div>

ハンバーガーは以下の部分です。

<div class="hamburger"><span></span><span></span><span></span></div>

クリックすると.bg-circleがフワッと広がり、メニューがディレイアニメで出現します。

 

css

cssを記述します。

#g-nav.panelactive{
position:fixed;
z-index: 999;
top: 0;
width:100%;
height: 100vh;
}
/*背景*/
.bg-circle{
position: fixed;
z-index:100;
width: 100px;
height: 100px;
border-radius: 50%;
background: #000;
transform: scale(0);
bottom:-30px;
left:calc(50% - 50px);
transition: all .6s;
}

.bg-circle.circleactive{
transform: scale(50);
}

/*メニューの縦スクロール*/
#nav-list{
display: none;
position: fixed;
z-index: 999; 
width: 100%;
height: 100vh;
overflow: auto;
-webkit-overflow-scrolling: touch;
}
#nav.panelactive #nav-list{
display: block;
}

/*メニュー*/
#nav ul {
opacity: 0;
position: absolute;
z-index: 9999;
top:50%;
left:46%;
transform: translate(-50%,-50%);
}

#nav.panelactive ul {
opacity:1;
}

#nav.panelactive ul li{
animation-name:gnaviAnime;
animation-duration:1s;
animation-delay:.2s;
animation-fill-mode:forwards;
opacity:0;
}
@keyframes gnaviAnime{
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}

#nav li{
text-align: center; 
list-style: none;
}

#nav li a{
color: #fff;
text-decoration: none;
padding:10px 0;
display: block;
text-transform: uppercase;
letter-spacing: 0.1em;
font-weight: bold;
}


/*ボタン*/
.hamburger{
position:fixed;
bottom:10px;
left:calc(50% - 25px);
z-index: 9999;
cursor: pointer;
width: 50px;
height:50px;
border-radius: 50%;
background: #000;
} 
.hamburger span{
display: inline-block;
transition: all .4s;
position: absolute;
left: 14px;
height: 3px;
border-radius: 2px;
background-color: #fff;
width: 45%;
}

.hamburger span:nth-of-type(1) {
top:15px; 
}

.hamburger span:nth-of-type(2) {
top:23px;
}

.hamburger span:nth-of-type(3) {
top:31px;
}

.hamburger.active span:nth-of-type(1) {
top: 18px;
left: 18px;
transform: translateY(6px) rotate(-45deg);
width: 30%;
}

.hamburger.active span:nth-of-type(2) {
opacity: 0;
}

.hamburger.active span:nth-of-type(3){
top: 30px;
left: 18px;
transform: translateY(-6px) rotate(45deg);
width: 30%;
}

hamburgerをページ下部へ設置

.hamburger{
position:fixed;
bottom:10px;
left:calc(50% - 25px);
}

.hamburgerがクリックされたら.bg-circleが0.6秒のフワッとアニメで広がります。

/*クリック前*/
.bg-circle{
transform: scale(0);
transition: all .6s;
}
/*フワッと広がる*/
.bg-circle.circleactive{
transform: scale(50);
}

そのあと、ディレイアニメでメニューが表示されます。

#nav.panelactive ul {
opacity:1;
}

#nav.panelactive ul li{
animation-name:gnaviAnime;
animation-duration:1s;
animation-delay:.2s;
animation-fill-mode:forwards;
opacity:0;
}
@keyframes gnaviAnime{
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}

js

function.jsを記述します。

$(".hamburger").click(function () {
$(this).toggleClass('active');
$("#nav").toggleClass('panelactive');
$(".bg-circle").toggleClass('circleactive');
});

$("#nav a").click(function () {
$(".hamburger").removeClass('active');
$("#nav").removeClass('panelactive');
$(".bg-circle").removeClass('circleactive');
});

$(“.hamburger”)がボタンのギミックです。
クリックされたらクラスが付与され、背景とメニューが展開されます。

$(“#g-nav a”)がメニューのギミックです。
クリックしたらクラスを削除し背景とメニューが閉じます。

 

以上です。

positionを変えたりすることで、いろんな展開方法が楽しめそうです。

 

デモはこちら

Spread the love