【PowerApps】こいつ動くぞ!動的なハンバーガーメニューの作り方


・はじめに

「リンクメニューとか、動的に展開/縮小させたいなぁ」と思い、作ったハンバーガーメニューです。
こんなことができるようになります。

・アイコンクリックでメニューを表示
・メニュー表示はアニメーションで徐々に表示される
・メニューをクリックするとリンク先のページに遷移
・メニューを閉じるときは再度アイコンをクリックする

・基本構成

アプリに挿入するパーツは以下の通り。

挿入するパーツ 名前 備考
ハンバーガーメニューアイコン Open_Icon メニュー表示用
ハンバーガーメニューアイコン Close_Icon メニュー閉じる用
タイマー Timer 動的にメニューを表示するため
ギャラリー(縦) Gallary メニュー本体

その他、アプリ内で利用するコレクションや変数については こちら を参照ください。

・実装方法

ハンバーガーメニューの形を作る

まずは、ハンバーガーメニューを表示した時の形を作成しましょう。
1. リボンメニュー > アイコン > ハンバーガーメニュー アイコンをスクリーン上に配置します。
2. リボンメニュー > 入力 > タイマー をスクリーン上に配置します。
3. リボンメニュー > ギャラリー > 縦 を選択します。※データソースは後で選択
4. 追加したギャラリーの配置をハンバーガーメニューの左側もしくは右側に合わせます。

配置イメージはこんな感じです。
各パーツの名前は下図の通り修正します。

メニュー用のコレクションを作成する

メニュー内容を用意するため、コレクションを作成します。
5. ツリービューに表示されている「App」をクリックします。

6. Appの詳細設定で OnStart に下記を設定します。

ClearCollect(MenuCollection,
  {No:1,url:"https://www.google.com/",Name:"Google"},
  {No:2,url:"https://www.yahoo.co.jp/",Name:"Yahoo"},
  {No:3,url:"https://www.bing.com/",Name:"Bing"},
  {No:4,url:"",Name:""},
  {No:5,url:"",Name:""},
  {No:6,url:"",Name:""},
  {No:7,url:"",Name:""},
  {No:8,url:"",Name:""},
  {No:9,url:"",Name:""},
);
Set(MenuView,0);

ギャラリーにデータソースを追加する

作成したコレクション(MenuCollection)をギャラリーに登録します。

7. ギャラリーをクリックして「MenuCollection」を選択する。

8. ギャラリーのレイアウトを「イメージとタイトル」に変更します。
9. 不要な矢印は削除します。

ギャラリーにアニメーションを追加する

アイコンクリック時にメニューを表示するためにタイマーを利用します。
時間経過に伴って徐々に表示していきます。

・タイマー修正

10. タイマーの詳細設計で下記項目を修正します。

項目 設定値
OnTimerEnd Set(TimerClick,0)
Start If(TimerClick=1,true,false)
Duration 185
Reset If(MenuView=0,true,false)
Text Self.Value

・ハンバーガーメニュー(メニュー表示用)アイコン修正

11. アイコン(Open_Icon) の詳細設計で下記項目を修正します。

項目 設定値
OnSelect Set(TimerClick,1); Set(MenuView,1)
Visible If(MenuView=0,true,false)

・ギャラリー修正

12. ギャラリーの詳細設計で下記項目を修正します。
※このとき、ギャラリー内のアイテム部分を選択してください。

項目 修正値 説明
OnSelect Launch(ThisItem.url,{},LaunchTarget.Blank) 別タブで開く
BorderThickness If(Timer.Value > 1,1,0) タイマー起動時に線を表示
Height If(Timer.Value > Timer.Duration+1,Timer.Duration*3,Timer.Value*3) 時間経過とともに高くなる

※ギャラリーの表示速度は Heightに設定している「Timer.Duration*3」部分で制御しています。

 

メニューを閉じる処理を追加する

ここまでで、アイコン(Open_Icon) クリックでメニューを表示できるようになりました。
最後にメニューを閉じる処理を追加します。

・ハンバーガーメニュー(メニュー閉じる用)アイコン修正

13. 表示用アイコン(Open_Icon) に重ねて、閉じる用アイコン(Close_Icon) を追加します。
14. 閉じる用アイコン(Close_Icon) の詳細設計で下記項目を修正します。

項目 設定値
OnSelect Set(TimerClick,0);Set(MenuView,0);
Visible If(MenuView=1,true,false)

動作確認

動作確認し、ハンバーガーメニューが動いていればOKです。
最後に、Timerを非表示にして完成です。

アプリ内で利用するコレクション、変数

メニューとして利用するコレクション(MenuCollection)の構成は以下の通り。

列名 用途
No ※未使用
url リンク先
Name メニューに表示するテキスト

使用する変数の名前と用途は以下の通り。

変数名 用途 説明
TimerClick タイマーの起動/停止を制御します 0:停止、1:起動
MenuView ギャラリーの表示/非表示を制御します 0:表示、1:非表示