jqueryMobileのα版を使ってみた。
現在スマートフォン用のサイトを作るために、簡単にデザイン変更が可能なJqueryMobileがあったので、使ってみた。
下記のように、サイトに基づいて作ってみた。
あと、こちらのまとめサイトも参考にさせていただいた。
<!DOCTYPE HTML> <html lang="ja"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <head> <title>Jquery Mobile Test</title> <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a2/jquery.mobile-1.0a2.min.css" /> <script src="http://code.jquery.com/jquery-1.4.4.min.js"></script> <script src="http://code.jquery.com/mobile/1.0a2/jquery.mobile-1.0a2.min.js"></script> </head> <body> <div data-role="page" data-theme="d"> <div data-role="header"> <h1>title</h1> </div> <div data-role="content"> <ul data-role="listview" data-inset="true" data-theme="c" data-dividertheme="b"> <li data-role="list-divider">outer-test-links</li> <li><a href="./jq-mobile-test-2.html">test-link</a></li> <li><a href="./jq-mobile-test.html">my-link</a></li> </ul> <ul data-role="listview" data-inset="true" data-theme="c" data-dividertheme="b"> <li data-role="list-divider">inner-test-links</li> <li><a href="#inner-test">test-link</a></li> </ul> </div> <div data-role="footer"> <h4>footer</h4> </div> </div> </body> </html>
HTMLの属性にJqueryMobile特有のものを記述すると、それを解釈して、デザインをスマートフォン用に変換してくれるようだ。
使っていくうちに1点問題があった。
同じページに遷移すると、HTMLが壊れるという問題。。
JqueryMobileのソースを追っていくと、下記の部分が問題があることが分かった。
if(transition && (transition !== 'none')){ $pageContainer.addClass('ui-mobile-viewport-transitioning'); // animate in / out from.addClass( transition + " out " + ( back ? "reverse" : "" ) ); to.addClass( $.mobile.activePageClass + " " + transition + " in " + ( back ? "reverse" : "" ) ); // callback - remove classes, etc to.animationComplete(function() { from.add( to ).removeClass(" out in reverse " + $.mobile.transitions.join(' ') ); from.removeClass( $.mobile.activePageClass ); loadComplete(); $pageContainer.removeClass('ui-mobile-viewport-transitioning'); }); } else{ from.removeClass( $.mobile.activePageClass ); to.addClass( $.mobile.activePageClass ); loadComplete(); }
3200行目あたり。
transitionは遷移時の切り替えActionをしている部分。
fromは遷移元のページ(or要素)、toは遷移先のページ(or要素)。
この処理は、fromの要素を消して、切り替えActionが指定されている場合は、その切り替えActionでtoの要素を表示するというもの。
つまり、fromの要素とtoの要素が同じであれば、最終的に何も表示されない。。
そこで、下記のように変更した。
if(transition && (transition !== 'none')){ $pageContainer.addClass('ui-mobile-viewport-transitioning'); // animate in / out from.addClass( transition + " out " + ( back ? "reverse" : "" ) ); to.addClass( $.mobile.activePageClass + " " + transition + " in " + ( back ? "reverse" : "" ) ); // callback - remove classes, etc to.animationComplete(function() { from.add( to ).removeClass(" out in reverse " + $.mobile.transitions.join(' ') ); // chenged by ochi0218 start // from.removeClass( $.mobile.activePageClass ); if(to.attr('id') != from.attr('id')) { from.removeClass( $.mobile.activePageClass ); } // chenged by ochi0218 end loadComplete(); $pageContainer.removeClass('ui-mobile-viewport-transitioning'); }); } else{ from.removeClass( $.mobile.activePageClass ); to.addClass( $.mobile.activePageClass ); loadComplete(); }
これで、とりあえず表示されるようになった。
早く安定版でないかなー。