jquery mobile 最新情報 & tips

71
jQuery Mobile 最新情報 & Tips 2012/3/15() Web CAT Studio Toru Yoshikawa ( @yoshikawa_t )

Upload: yoshikawat

Post on 01-Nov-2014

12.180 views

Category:

Technology


7 download

DESCRIPTION

3/15のWeb Cat Studio(リクルートエージェント)で行われた「jQuery Mobile 最新情報 & Tips」のセッション資料です。

TRANSCRIPT

Page 1: jQuery Mobile 最新情報 & Tips

jQuery Mobile 最新情報 & Tips

2012/3/15(木) Web CAT StudioToru Yoshikawa ( @yoshikawa_t )

Page 2: jQuery Mobile 最新情報 & Tips

Who?吉川 徹/Toru Yoshikawa

html5j.org/HTML5とか勉強会スタッフ

Google API Expert ( Chrome API )

Chrome API Developers JP

allWebクリエイター塾/jQuery Mobile担当講師

Twitter: @yoshikawa_t

Blog: http://d.hatena.ne.jp/pikotea/

Page 3: jQuery Mobile 最新情報 & Tips

Agenda

jQuery Mobile 1.1

jQuery Mobile tips

jQuery Mobile design customize

Questions

Page 4: jQuery Mobile 最新情報 & Tips

http://jqmworks.appspot.com/1.1tips/

Sample

Page 5: jQuery Mobile 最新情報 & Tips

jQuery Mobile 1.1

Page 6: jQuery Mobile 最新情報 & Tips

jQuery 1.7.1のサポート

固定ツールバーの最適化

ページアニメーションの最適化

新たなページアニメーションの追加(Turn、Flow)

コンパクトなフォームの追加と各種デザイン変更

サードパーティ製のUIライブラリが利用できるように

今月中には、1.1正式版がリリース予定

Summary

Page 7: jQuery Mobile 最新情報 & Tips

固定ツールバーの最適化固定ツールバーがスムーズに

スクロール中に固定ツールバーが消えたり(旧仕様)、固定ツールバーがへんな位置に来ることがなくなった

JavaScriptによるエミュレートは削除、position:fixedを利用した固定ツールバーに変更

サポートしていないブラウザでは、固定ツールバーは動作しない(固定されない)

サポートブラウザ

Android 2.2+

iOS5+

Page 8: jQuery Mobile 最新情報 & Tips

固定ツールバーの最適化<div data-role="footer" data-position="fixed" data-tap-toggle="false"> 固定フッター</div>

data-position="fixed"でフッターの固定

data-tap-toggle="false"で画面をタップしたときのフッターの表示・非表示の切り替えをしない

Page 9: jQuery Mobile 最新情報 & Tips

ページアニメーションの最適化スクロール位置を維持したまま2つのページを同時にアニメーションするのが難しかったため、fade in/outを組み合わせた方式に変更

デフォルトのアニメーションは、slideからfadeに変更

Android2.x系は、CSS周りが遅いので強制的にfadeに変更(Android4.0のデフォルトブラウザでもfade)

Page 10: jQuery Mobile 最新情報 & Tips

新たなページアニメーションの追加

Turnページの左端を基準にして、回転するように現在ページがめくれ、次のページも回転しながら表示される

Flowいったんページが縮小され、その後に左に移動して消える。縮小された次のページが右から笑われて拡大される

<a data-transition="turn">turn</a><a data-transition="flow">flow</a>

Page 11: jQuery Mobile 最新情報 & Tips

コンパクトなフォームの追加と各種デザイン変更

ツールバーなどに入れるために小さいフォームを用意

Page 12: jQuery Mobile 最新情報 & Tips

コンパクトなフォーム

<input type="button" value="ボタン" data-mini="true">

<fieldset data-role="controlgroup" data-mini="true"> <input type="checkbox" name="chk" id="chk1"> <label for="chk1">Check1</label> ...</fieldset>

フォームへの指定方法

複数の要素を持つフォームへの指定方法

Page 13: jQuery Mobile 最新情報 & Tips

各種デザイン変更フリップスイッチ

Page 14: jQuery Mobile 最新情報 & Tips

各種デザイン変更スライダー(ハイライト)

Page 15: jQuery Mobile 最新情報 & Tips

各種デザイン変更

<select data-role="slider"> <option>OFF</option> <option>ON</option></select>

<input type="range" value="0" min="0" max="100" step="5" data-highlight="true">

フリップスイッチ(記述は変更なし)

スライダーのhighlight指定

Page 16: jQuery Mobile 最新情報 & Tips

各種デザイン変更Ajaxローダー

No text Text only

Page 17: jQuery Mobile 最新情報 & Tips

各種デザイン変更

$.mobile.showPageLoadingMsg();

$.mobile.showPageLoadingMsg('a', 'message');

デフォルトのロード中アイコン表示

ローディングメッセージ表示(※RC1では動作しない)

$.mobile.showPageLoadingMsg('a', 'message', true);

メッセージのみ表示

Page 18: jQuery Mobile 最新情報 & Tips

サードパーティ製のUIライブラリが利用できるように

$(document).on('mobileinit', function(){$.mobile.ignoreContentEnabled = true;

});

初期設定

<div data-enhance="false"> <!-- third party ui markup --></div>

data-enhance="true"

Page 19: jQuery Mobile 最新情報 & Tips

その他ページアニメーションのFirefoxのサポート

$.mobile.touchOverflowEnabledは非推奨に(削除予定)

スライダーのstep属性をサポート

iOSのOrientation Changeのズームバグに対応

AMD(非同期モジュール読み込み)対応

コンテナへのdata-ajax="false"の有効化

Page 20: jQuery Mobile 最新情報 & Tips

jQuery Mobile Tips

Page 21: jQuery Mobile 最新情報 & Tips

オンラインオーサリングツール

Third Party Plugin

ThemeRoller

jQM Gallery

PhoneGap

Responsive Web Design

Performance

latest build

Tips

Page 22: jQuery Mobile 最新情報 & Tips

オンラインオーサリングツールcodiqa

http://www.codiqa.com/

Page 24: jQuery Mobile 最新情報 & Tips

Third Party PluginPagination

http://filamentgroup.com/lab/jquery_mobile_pagination_plugin/

Page 25: jQuery Mobile 最新情報 & Tips

Third Party PluginPhotoSwipe

http://www.photoswipe.com/

Page 26: jQuery Mobile 最新情報 & Tips

Third Party PluginDateBox

http://dev.jtsage.com/jQM-DateBox/

Page 27: jQuery Mobile 最新情報 & Tips

Third Party PluginSimple Dialog

http://dev.jtsage.com/jQM-SimpleDialog/

Page 28: jQuery Mobile 最新情報 & Tips

Third Party PluginActionsheet

https://github.com/hiroprotagonist/jquery.mobile.actionsheet

Page 29: jQuery Mobile 最新情報 & Tips

Third Party Plugin960 Grid on JQuery Mobile

http://jeromeetienne.github.com/jquery-mobile-960/index.html

Page 30: jQuery Mobile 最新情報 & Tips

Third Party Pluginその他

jquery-ui-map … jQueryとjQuery Mobile用のGoogle Maps Plugin

Bartender … iOS風のタブバー

Camera slideshow … リッチなスライドショー

mobiscroll … ドラムロール式のDate Picker

Multiview … レスポンシブな2カラムビュー

Splitview … レスポンシブな2カラムビュー

Page 31: jQuery Mobile 最新情報 & Tips

ThemeRoller

http://jquerymobile.com/themeroller/

GUI上簡単にjQuery Mobileのテーマが作成可能

Page 32: jQuery Mobile 最新情報 & Tips

jQuery Mobile Gallery

http://www.jqmgallery.com/

Page 33: jQuery Mobile 最新情報 & Tips

PhoneGap

http://phonegap.com/

HTML/CSS/JavaScriptのWebアプリケーションをネイティブアプリに変換可能

iOS、Android、Windows Phoneなど様々なプラットフォームに対応

カメラなどのネイティブの機能を利用可能

Page 34: jQuery Mobile 最新情報 & Tips

PhoneGap Build

https://build.phonegap.com/

開発環境がなくてもクラウド上で簡単にビルド

Page 35: jQuery Mobile 最新情報 & Tips

Responsive Web DesignjQuery Mobile Docs

Page 36: jQuery Mobile 最新情報 & Tips

2カラムレイアウトとCollapsibleブロック

Page 37: jQuery Mobile 最新情報 & Tips

CSS Media Queries

デバイスのサイズごとに異なるスタイルを適用する

画面サイズ大きいものには、2カラムレイアウトのスタイルを。

IEは、respond.jsもしくはcss3-mediaqueries.jsを使う

Page 38: jQuery Mobile 最新情報 & Tips

2カラムレイアウト@media all and ( min-width: 650px ){ .content-primary { width: 45%; float: right; } .content-secondary { width: 45%; float: left; }}

Page 39: jQuery Mobile 最新情報 & Tips

スタイルによるCollapsibleブロックの展開

.content-secondary .ui-collapsible-heading { display: none;}.content-secondary .ui-collapsible-contain { margin:0;}.content-secondary .ui-collapsible-content { display: block; margin: 0; padding: 0;}

Page 40: jQuery Mobile 最新情報 & Tips

トランジションの切り替え$(window).bind("throttledresize", setDefaultTransition );

function setDefaultTransition(){ var winwidth = $(window).width(), trans = "slide";

if ( winwidth >= 1000 ){ trans = "none"; } else if ( winwidth >= 650 ) { trans = "fade"; }

$.mobile.defaultPageTransition = trans;}

Page 41: jQuery Mobile 最新情報 & Tips

トランジション速度の調整/* デフォルトのアニメーション時間は350ms */@media all and ( min-width: 750px ) { .slide .in, .slide .out { -webkit-animation-timing-function: ease-in-out; -webkit-animation-duration: 700ms; }}

Page 42: jQuery Mobile 最新情報 & Tips

Page Animation:

link -> data-transition="none"

data-ajax="false" is bad knowhow.

Page Cache:

page -> data-dom-cache="true"

Page Prefetch:

link -> prefetch

$.mobile.loadPage();

Don't use too many custom select menu.

Don't use too many nested list.

Performance

Page 44: jQuery Mobile 最新情報 & Tips

jQuery Mobile design customize

Page 46: jQuery Mobile 最新情報 & Tips

jQuery Mobile Tutorial: Creating a Restaurant Picker

Home

Page 47: jQuery Mobile 最新情報 & Tips

jQuery Mobile Tutorial: Creating a Restaurant Picker

Choose the town

Page 48: jQuery Mobile 最新情報 & Tips

jQuery Mobile Tutorial: Creating a Restaurant Picker

Choose the restaurant

Page 49: jQuery Mobile 最新情報 & Tips

jQuery Mobile Tutorial: Creating a Restaurant Picker

Restaurant details

Page 50: jQuery Mobile 最新情報 & Tips

Next

Page 51: jQuery Mobile 最新情報 & Tips

今月中に1.1の正式版をリリース予定

Download Builder Toolを提供予定

ThemeRoller update?

春には1.2をリリース予定

popup component ( like Simple Dialog )

fetch links

ajax navigation system ( data-target )

auto enhancement ( data-fragment )

Roadmap

Page 52: jQuery Mobile 最新情報 & Tips

Questions

Page 53: jQuery Mobile 最新情報 & Tips

Question 1ajaxを使った画面遷移先でJavaScriptを動かしたいが、body内のJavaScriptが無視されてしまう。

Ajaxでの遷移は、遷移先の<div data-role="page"></div>のみ取得するので、どうしてもそのページで実行したい場合は、<div data-role="page"><script>...</script></div>としましょう。

できれば、共通スクリプトでpageinitイベントなどで実行するようにしてください。

Page 54: jQuery Mobile 最新情報 & Tips

Auto Ajax mechanism

<html><head> <!-- link, head --></head><body> <div data-role="page"> ... </div></body></html>

<html><head> <!-- link, head --></head><body> <div data-role="page"> ... </div></body></html>

<html><head> <!-- link, head --></head><body> <div data-role="page"> ... </div></body></html>

ページ1 ページ2 ページ3

初回アクセス

ajax ajax

Page 55: jQuery Mobile 最新情報 & Tips

Auto Ajax mechanism

<html><head> <!-- link, head --></head><body> <div data-role="page"> ... </div></body></html>

<html><head> <!-- link, head --></head><body> <div data-role="page"> ... </div></body></html>

<html><head> <!-- link, head --></head><body> <div data-role="page"> ... </div></body></html>

ページ1 ページ2 ページ3

初回アクセス

ajax ajax

Page 56: jQuery Mobile 最新情報 & Tips

Question 2Mobile Bookmark Bubbleを使いたいが、JQMのajaxのせいでうまく動かない

iPhoneでWebアプリのホーム画面登録を促す「Mobile Bookmark Bubble」をjQuery Mobileと併用してみた

http://d.hatena.ne.jp/a_kimura/20110507/1304801259

Page 57: jQuery Mobile 最新情報 & Tips

Question 3header部分にsubmitを配置する為に、form要素をheaderも含めて囲むと、iPhoneで表示が崩れる。

現象を確認できませんでした。もしかしたら、marginやpaddingの設定があるのかもしれません。

どうしてもダメなら、スクリプトで。

Page 58: jQuery Mobile 最新情報 & Tips

Question 4ダブルタップを判定するために、タップしてからアクションするまでに タイムラグが生じますが、シングルタップのみしか使用しない設計を している場合、ダブルタップの判定を省略することは出来るのでしょうか?

vclickイベントを利用してください。

Page 59: jQuery Mobile 最新情報 & Tips

Question 5

jQueryMobileを採用して、格好いいUIを提供しているサイト(事例)があれば知りたい。とくに金融系で何かあれば。

jQuery Mobileの事例紹介など。

jQM GalleryにCoolなサイトはたくさん置いてあります!金融系かどうかはちょっとわかりません…

Page 60: jQuery Mobile 最新情報 & Tips

Question 6JavaScriptの実機での効率の良いデバッグ方法

最近だとAdobe Shadowがリモートデバッグに対応していますね。Chrome for Androidも同じくリモートデバッグができます。それ以外は、weinreというツールもあります。

Page 61: jQuery Mobile 最新情報 & Tips

Question 7アンカーリンクは使えないんでしょうか?代替はどのようなものがあるのでしょうか?

a要素にdata-ajax="false"を指定してください。

Page 62: jQuery Mobile 最新情報 & Tips

Question 8jQuery Mobile 1.0.1から1.1へアップデートする際の注意点など

基本的に動作はしますが、アニメーションのデフォルトがfadeになったことと固定ツールバーが変わっているのでそこだけ注意です

Page 63: jQuery Mobile 最新情報 & Tips

Question 9ページ遷移で発生するイベントの効果的な使い方等あれば参考にしたいです。

通常のページで簡単に利用できるGoogle Maps、Google Analytics、Google Adsenseなどはpageshowイベントなどでページ遷移の際に実行する必要があります。

loadイベントの代わりに各ページでpageinitイベントを利用してください。

共通パーツの作成などにpagecreateイベントが利用できます。

Page 64: jQuery Mobile 最新情報 & Tips

pageshow event and Google Analytics

$(document).on('mobileinit', function(){ $(':jqmData(role="page")').live('pageshow', function () { _gaq.push(['_trackPageview', $.mobile.activePage.jqmData('url')]); });}

各ページの表示時にトラッキング

Page 65: jQuery Mobile 最新情報 & Tips

Question 10ネイティブアプリにするかhtml5で作るかの判断の仕方

まず、HTML5で対応できない機能用件があるかどうか、そしてパフォーマンスやユーザービリティを重視する案件であるかどうかが大きな判断材料になるかと思います。

Page 66: jQuery Mobile 最新情報 & Tips

Question 11iOS4での重さは改善したのか。

各種モバイル端末の動作具合(iOSやAndroid)

パフォーマンスは良くなっているはずですが、感覚のところもあるので是非試してみてください。

Page 67: jQuery Mobile 最新情報 & Tips

Question 12

スマートフォン対応の業務アプリ開発における課題。(もちろん主観で構いません。)

業務アプリの場合、jQuery Mobileのデメリットをあまり考え無くても良いので積極的に利用できるかと思います。

Page 68: jQuery Mobile 最新情報 & Tips

Question 13

ガラケーモバイルサイトからスマートフォン用のサイトへの移行。

UTF-8化、viewportタグ、jQuery Mobileの読み込み、data-role="page"によるページの切り出し、最後にdata-enhance="false"でネイティブのUIを利用しつつ少しずつ対応

Page 69: jQuery Mobile 最新情報 & Tips

Question 14陥りやすい落とし穴などあればぜひ教えていただきたいです。

Ajaxによるページ遷移の仕組みに起因する問題が多いです。

script等がうまく読み込めない、動作しない場合の対応(page関連のイベントを使う)

複数のファイルのページを同じページに取り込むので、id属性の重複に気をつけること

ローカル環境では、XHRの制約で別ファイルへ遷移ができないこと(サーバー環境では可能)

Page 70: jQuery Mobile 最新情報 & Tips

more?

Page 71: jQuery Mobile 最新情報 & Tips

Thank you!!( @yoshikawa_t)