Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Onsen UIで知っておくと便利なコト
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Atsushi Nakatsugawa
PRO
May 26, 2018
Technology
0
920
Onsen UIで知っておくと便利なコト
Monaca UG OHMIYA #2の発表資料です
Atsushi Nakatsugawa
PRO
May 26, 2018
Tweet
Share
More Decks by Atsushi Nakatsugawa
See All by Atsushi Nakatsugawa
AIで急増した生産量の荒波をCodeRabbitで乗りこなそう
moongift
PRO
1
63
AIによるコードレビューで 開発体験を向上させよう!
moongift
PRO
0
48
レビュー負債を解消する ― CodeRabbitが支えるAI駆動開発
moongift
PRO
0
590
個人開発からエンプラまで。AIコードレビューで開発を楽しもう
moongift
PRO
0
420
AIで急増した生産「量」の荒波をCodeRabbitで乗りこなそう
moongift
PRO
1
1.6k
Codexとも仲良く。CodeRabbit CLIの紹介
moongift
PRO
1
880
リレーションからマーケティングへ。継続するDevRelのために行うべきこと
moongift
PRO
0
32
開発スピードとスキル向上を両立するAIコードレビューの活かし方
moongift
PRO
0
85
個人開発にAIレビューを導入しよう
moongift
PRO
0
74
Other Decks in Technology
See All in Technology
Cloud Runでコロプラが挑む 生成AI×ゲーム『神魔狩りのツクヨミ』の裏側
colopl
0
140
量子クラウドサービスの裏側 〜Deep Dive into OQTOPUS〜
oqtopus
0
150
Agile Leadership Summit Keynote 2026
m_seki
1
670
登壇駆動学習のすすめ — CfPのネタの見つけ方と書くときに意識していること
bicstone
3
130
Context Engineeringの取り組み
nutslove
0
380
ClickHouseはどのように大規模データを活用したAIエージェントを全社展開しているのか
mikimatsumoto
0
270
生成AIと余白 〜開発スピードが向上した今、何に向き合う?〜
kakehashi
PRO
0
150
AWS DevOps Agent x ECS on Fargate検証 / AWS DevOps Agent x ECS on Fargate
kinunori
2
140
20260208_第66回 コンピュータビジョン勉強会
keiichiito1978
0
200
日本の85%が使う公共SaaSは、どう育ったのか
taketakekaho
1
240
こんなところでも(地味に)活躍するImage Modeさんを知ってるかい?- Image Mode for OpenShift -
tsukaman
1
170
マネージャー視点で考えるプロダクトエンジニアの評価 / Evaluating Product Engineers from a Manager's Perspective
hiro_torii
0
180
Featured
See All Featured
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
60
42k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.6k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.9k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.2k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
85
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
7.9k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
260
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.2k
How to build a perfect <img>
jonoalderson
1
4.9k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
240
My Coaching Mixtape
mlcsv
0
50
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.7k
Transcript
PAGE DAY 2017/11/01 # MOONGIFT X / 12 Onsen UIで知っておくと便利なコト
PAGE DAY 2017/11/01 # MOONGIFT X / 12 自己紹介 @goofmint
fb.me/goofmint 中津川 篤司 株式会社MOONGIFT 代表取締役 NCMB エヴァンジェリスト 2004年1月よりオープンソース・ソフトウェアを毎 日紹介するブログ MOONGIFT を運営。 http://www.moongift.jp/ Monaca Pressの執筆/Monaca UGサポート
PAGE DAY 2017/11/01 # MOONGIFT X / 12 Onsen UI?
• Monacaを提供しているアシアル社がメインで開発しているモ バイル向けHTML5 UIフレームワーク • ネイティブアプリっぽいUI、インタラクションを簡単に実現 • Monacaとの相性よし
PAGE DAY 2017/11/01 # MOONGIFT X / 12 Onsen UI
vs Ionic framework 0OTFO6* *POJDGSBNFXPSL ϑϨʔϜϫʔΫ +BWB4DSJQU"OHVMBS3FBDU7VF K2VFSZ "OHVMBS ωΠςΟϒײ ˓ ˕ υΩϡϝϯτ ຊޠӳޠ ӳޠ 2" 5FSBUBJM 4UBDLPWFSqPX 【Angular2】 そろそろ Onsen UI 2 と Ionic2 を開発面からみて比較しようと思う。
PAGE DAY 2017/11/01 # MOONGIFT X / 12 Onsen UIの注意点
• モバイル、タブレット向けです。デスクトップブラウザはサ ポート外なので注意しましょう(デスクトップも対象なら Vuetifyがいいらしい) • textareaがない • 色々やってくれる反面、無理をしようと思うと大変に… (Onsen流に慣れる必要あり)
PAGE DAY 2017/11/01 # MOONGIFT X / 12 ドキュメント
PAGE DAY 2017/11/01 # MOONGIFT X / 12 ドキュメント
PAGE DAY 2017/11/01 # MOONGIFT X / 12 <ons-navigator swipeable
id="myNavigator" page=“page1.html"> </ons-navigator> <template id="page1.html"> <ons-page id="page1"> <ons-toolbar> <div class="center">Page 1</div> </ons-toolbar> <p>This is the first page.</p> <ons-button id="push-button">Push page</ons-button> </ons-page> </template> <template id="page2.html"> <ons-page id="page2"> <ons-toolbar> <div class="left"><ons-back-button>Page 1 </ons-back-button></div> <div class="center"></div> </ons-toolbar> <p>This is the second page.</p> </ons-page> </template>
PAGE DAY 2017/11/01 # MOONGIFT X / 12 document.addEventListener('init', function(event)
{ var page = event.target; if (page.id === 'page1') { page.querySelector('#push-button').onclick = function() { document.querySelector(‘#myNavigator').pushPage('page2.html', {data: {title: 'Page 2'}}); }; } else if (page.id === 'page2') { page.querySelector('ons-toolbar .center’) .innerHTML = page.data.title; } });
PAGE DAY 2017/11/01 # MOONGIFT X / 12 よく分からない…
PAGE DAY 2017/11/01 # MOONGIFT X / 12 最近掴んできたコツ
PAGE DAY 2017/11/01 # MOONGIFT X / 12 素で使う場合
PAGE DAY 2017/11/01 # MOONGIFT X / 12 タブバーを使わない場合 •
とりあえず <ons-navigator /> を使う <ons-navigator swipeable id="nav" page=“main.html”> </ons-navigator> 最初に表示するページ タブバー
PAGE DAY 2017/11/01 # MOONGIFT X / 12 main.html •
<ons-page />で囲む。bodyタグの中だけを書く <ons-page> <p>Hello World!</p> <ons-button id="move" modifier=“large--quiet"> 別ページに移動 </ons-button> </ons-page>
PAGE DAY 2017/11/01 # MOONGIFT X / 12
PAGE DAY 2017/11/01 # MOONGIFT X / 12 main.htmlが表示された時に処理実行 •
main.htmlの下に<script>タグで記述 <ons-page> <p>Hello World!</p> <ons-button id="move" modifier=“large--quiet"> 別ページに移動 </ons-button> </ons-page> <script> alert(true); </script>
PAGE DAY 2017/11/01 # MOONGIFT X / 12 Onsen UIのイベント処理
• ons.ready(() => {}) アプリが立ち上がった時に一回だけ実行 DOMContentLoaded + DeviceReady が合わさったようなもの • document.addEventListener(‘init’, (e) => {}) 画面が構成された時に実行 同じ画面を使い回す場合は1回だけ。別な画面の情報も。 e.target.id で <ons-page id=“xxx” /> に割り当てたidで判別 • document.addEventListener(‘show’, (e) => {}) 画面が表示される時に実行 e.target.id で <ons-page id=“xxx” /> に割り当てたidで判別
PAGE DAY 2017/11/01 # MOONGIFT X / 12 main.htmlで次のように記述 •
ons.getScriptPage().onInit = function() {} 画面が構成された時に呼ばれる その画面の時にしか呼ばれない • ons.getScriptPage().onShow = function() {} 画面が表示された時に呼ばれる その画面の時にしか呼ばれない
PAGE DAY 2017/11/01 # MOONGIFT X / 12 違い EPDVNFOUBEE&WFOU-JTUFOFS
POTHFU4DSJQU1BHF ϖʔδఆ FUBSHFU UIJT ଞͷϖʔδಡΈࠐΈ࣌ ݺΕΔ ݺΕͳ͍ ɾׅހ &4 ˓ º POTQBHFJE ඞཁ ෆཁ QPQ࣌ Πϕϯτ͕Δ Πϕϯτফ͑Δ
PAGE DAY 2017/11/01 # MOONGIFT X / 12 コード ons.getScriptPage().onInit
= function() { // 処理を書く } document.addEventListener('init', (e) => { const page = e.target; if (page.id !== 'AAA') return; // 処理を書く });
PAGE DAY 2017/11/01 # MOONGIFT X / 12 つまりこう <ons-page>
<p>Hello World!</p> <ons-button id="move" modifier=“large--quiet"> 別ページに移動 </ons-button> <script> ons.getScriptPage().onShow = function() { console.log('Show') } ons.getScriptPage().onInit = function() { console.log('Init') } </script> </ons-page>
PAGE DAY 2017/11/01 # MOONGIFT X / 12 イベント処理 •HTML中でのonclick
•document.querySelector
PAGE DAY 2017/11/01 # MOONGIFT X / 12 <ons-page> <p>Hello
World!</p> <ons-button id="move" onclick="move()" modifier=“large--quiet"> 別ページに移動 </ons-button> <script> ons.getScriptPage().onShow = function() { console.log('Show') } ons.getScriptPage().onInit = function() { document.querySelector('#move').onclick = (e) => { document.querySelector('#nav').pushPage('detail.html'); } } const move = () => { document.querySelector('#nav').pushPage('detail.html'); } </script> </ons-page>
PAGE DAY 2017/11/01 # MOONGIFT X / 12 navigatorで戻る処理 •
ons-back-button がよしなにやってくれる • document.querySelector(‘#nav').popPage(); <ons-toolbar> <div class="left"> <ons-back-button> Back </ons-back-button> </div> <div class="center"></div> </ons-toolbar>
PAGE DAY 2017/11/01 # MOONGIFT X / 12 HTML操作 •
Onsen UIが適当に変換してくれる const result = document.querySelector('#result') result.innerHTML = `${result.innerHTML} <ons-list-item>${new Date}</ons-list-item>`;
PAGE DAY 2017/11/01 # MOONGIFT X / 12 画面遷移する時にデータを渡す DPOTUNFTTBHFEPDVNFOU
HFU&MFNFOU#Z*E NFTTBHF WBMVF EPDVNFOURVFSZ4FMFDUPS OBW QVTI1BHF EFUBJMIUNM \ EBUB\NFTTBHF^ ^
PAGE DAY 2017/11/01 # MOONGIFT X / 12 データを受け取る ons.getScriptPage().onInit
= function() { document.getElementById('receive') .innerHTML = this.data.message; }
PAGE DAY 2017/11/01 # MOONGIFT X / 12 Vue.jsで使う場合
PAGE DAY 2017/11/01 # MOONGIFT X / 12 Monaca CLIを使いましょう
$ npm i monaca-cli -g
PAGE DAY 2017/11/01 # MOONGIFT X / 12 ベースを作る $
monaca create YOUR_PROJECT_NAME
PAGE DAY 2017/11/01 # MOONGIFT X / 12 大事なのはsrc以下 $
tree src/ src/ ├── App.vue ├── CustomToolbar.vue ├── Page1.vue ├── Page2.vue ├── main.js └── public └── index.html.ejs 1 directory, 6 files
PAGE DAY 2017/11/01 # MOONGIFT X / 12 App.vue <template>
<v-ons-navigator :page-stack="pageStack"> <component :is="page" v-for="page in pageStack" :page-stack="pageStack"></component> </v-ons-navigator> </template> <script> import page1 from './Page1'; import page2 from './Page2'; export default { data() { return { pageStack: [page1] } } } </script>
PAGE DAY 2017/11/01 # MOONGIFT X / 12 App.vue <template>
<v-ons-navigator :page-stack="pageStack"> <component :is="page" v-for="page in pageStack" :page-stack="pageStack"></component> </v-ons-navigator> </template> <script> import page1 from './Page1'; import page2 from './Page2'; export default { data() { return { pageStack: [page1] } } } </script>
PAGE DAY 2017/11/01 # MOONGIFT X / 12 App.vue <template>
<v-ons-navigator :page-stack="pageStack"> <component :is="page" v-for="page in pageStack" :page-stack="pageStack"></component> </v-ons-navigator> </template> <script> import page1 from './Page1'; import page2 from './Page2'; export default { data() { return { pageStack: [page1] } } } </script>
PAGE DAY 2017/11/01 # MOONGIFT X / 12 Page1.vue <template>
<v-ons-page> <custom-toolbar>Page 1</custom-toolbar> <p style="text-align: center"> This is the first page <v-ons-button @click="push">Push Page 2</v-ons-button> </p> </v-ons-page> </template> <script> import customToolbar from './CustomToolbar';
PAGE DAY 2017/11/01 # MOONGIFT X / 12 まとめ •
Onsen UIを使えばネイティブライクなUIのハイブリッドアプ リが簡単に作れます • Web Componentをマスターしましょう! • イベントハンドリングの方法を覚えれば分かりやすく、すっ きり書けます!