Vuetifyで綺麗なボトムナビゲーションを実装する方法
今回は、主に画面下部で用いる、ナビゲーションメニューを手軽に実装することができる
v-bottom-navigation についての記事です。
↑こんな感じのボトムナビゲーションを表示してみます。上記ムービーのように、クリック操作で表示/非表示の切り替えも可能です。
Vuetifyの導入方法について等は、以前の記事:
[Vue.js]Vuetify のUIコンポーネントを使ってみる[v-slide, v-caroucel編] にCDN経由での導入方法を、
[Vue.js] Vuetify を導入して Material Design をスマートに取り入れる方法 内に、CLI経由での導入方法 をご紹介しています。あわせてご覧ください。
コードをご紹介
<template>
<v-card style="width: 375px; height: 667px;">
<v-bottom-navigation color="primary" v-model="isActive" absolute="true">
<v-btn value="menu01">
<span>menu01</span>
<v-icon>mdi-history</v-icon>
</v-btn>
<v-btn value="menu02">
<span>menu02</span>
<v-icon>mdi-heart</v-icon>
</v-btn>
<v-btn value="menu03">
<span>menu03</span>
<v-icon>mdi-map-marker</v-icon>
</v-btn>
</v-bottom-navigation>
</v-card>
</template>
解説など
この v-bottom-navigation というコンポーネントは、アプリでよく目にする
画面下部のナビゲーションを簡単に実装できるコンポーネントになります。
上記の例の様に、なんらかの親要素でラップして、
3行目にある様に absolute オプション(正確には、props という概念)を true にして表示させるか、
または
fixed という props を加えてページ全体に常時固定表示させるか、
2通りの表示方法が考えられます。
※上記コードの例は、absolute という props をtrueにする方法です。
なお、あえて absolute=”true” と真偽値であることを明示して書いていますが、
単純に absolute と書くだけでも、
このオプションをオンに(trueに)することが可能です。
また、便宜上 v-card でラップしているのは、
v-card はデフォルトで position: relative; をもっているため、
ラップした親要素の範囲内でメニューが配置されることを意図している、ということです。
(ということは、親要素はべつに
普通の div 要素でも良く、position: relative; を加えておけば
問題なく表示が可能、とも言えます。)
2行目の v-card に
style直書きで
width: 375px; height: 667px;
としているのは、
これもサンプルを作るための便宜上の定義です。
実際に使用する場合は、
fixed という props を加えて常時固定表示させるほうが
使い勝手が良いかもしれません。
3行目の
v-bottom-navigation
がこのコンポーネント自体を表示している要素になります。
v-model="isActive" として data が紐づく様になっていますが、
ここに紐づけた data で
どのボタンがアクティブになっているかを管理しています。
data はもちろん、以下の様にあらかじめ Vue に定義しておく必要があります。
<script>
new Vue({
el: '#app',
vuetify: new Vuetify(),
data: {
isActive: 'menu01'
}
});
</script>
↑つまりこういう事でして、
この isActive(名前はなんでも良いです) という data に
現在アクティブになっているボタンの名前が string として格納されていることになります。
このセクション冒頭の、htmlの方のコードの
4, 9, 14行目にある様に、
v-btn
要素が、ボトムナビゲーション内に配置される各ボタンになります。
これらボタンには
value="menu01"
のように value という props が指定されていますが、
ボタンがクリックされるたび、
先ほどの isActive に
valueの値が代入される、そんな仕組みになっています。
この仕組みを元に、例えば3行目で
color=”primary”
と指定しているように、現在アクティブになっているボタンの色を変えたり、
様々な操作を行うことができる様になっています。
実際に動くサンプル
今回も実際に動くサンプルを作成してあります。
次のリンクより、ご覧ください。
v-bottom-navigationのサンプル
toggle(表示/非表示)オプションを試してみる
この v-bottom-navigation にも、Vuetifyの他のコンポーネントの様に
様々な各種 props が用意されていますが、
今回は
「ボタンを押すと、ボトムナビゲーションを表示/非表示させる事ができる」
というオプションをご紹介します。
※いわゆる、トグル(toggle)表示ができる、ということですね。
コードは次の様になります。
<template>
<v-card style="width: 375px; height: 667px; overflow: hidden;">
<div class="text-center mb-8">
<v-btn
color="primary"
@click="toggle = !toggle"
>
ボトムナビゲーションのON/OFF
</v-btn>
</div>
<v-bottom-navigation color="primary" v-model="isActive" v-bind:input-value="toggle" absolute="true">
<v-btn value="menu01">
<span>menu01</span>
<v-icon>mdi-history</v-icon>
</v-btn>
<v-btn value="menu02">
<span>menu02</span>
<v-icon>mdi-heart</v-icon>
</v-btn>
<v-btn value="menu03">
<span>menu03</span>
<v-icon>mdi-map-marker</v-icon>
</v-btn>
</v-bottom-navigation>
</v-card>
</template>
↑先ほどとの違いは、
v-bottom-navigation に
v-bind:input-value=”toggle” として
input-value という props を指定していることです。
ここに紐づけた data が true/false になることで、
ボトムナビゲーションの表示/非表示を制御している、という仕組みになっています。
こちらのサンプルの場合のdataは、以下の様になります。
toggle という真偽値が入る data(名前はなんでも良いです)を加えてあげるだけです。
<script>
new Vue({
el: '#app',
vuetify: new Vuetify(),
data: {
isActive: 'menu01',
toggle: true
}
});
</script>
オプションを加えたサンプル
先ほどの基本形のサンプルの下に、表示/非表示のオプション(正確には、props)を加えたサンプルを作成しましたので
次のリンクより、確認いただけます。
v-bottom-navigationのサンプル
公式ドキュメント、APIページについて
v-bottom-navigation コンポーネントの Vuetify公式ページは以下です。
また、公式APIページはこちらになります。こちらに、設定可能な各種 props についての一覧が掲載されています。
v-bottom-navigation API — Vuetify
この記事のまとめ
今回は、Vuetify のUIコンポーネントの中から、
アプリなどでよく目にするボトムナビゲーションを実装することができる
v-bottom-navigation についてご紹介しました。
「こういうUIを試してみたい」と思った時、
豊富なオプションとともに
それがすぐに手軽に実装できるのも、
Vuetifyの強みのひとつですね。
当サイトでは今後も Vue.js、 Vuetify に関する記事を掲載していく予定です。
※この記事は、内容の品質向上を目的に、随時更新を行う場合があります。