http://blog.csdn.net/shoyer/article/details/8451070javascript
$("#Home").live('pageinit',function() { //在這裏執行#Home頁面加載後須要運行的方法 });
對於頂部導航欄,咱們一般使用data-position="fixed"來固定頂部的顯示。php
如圖,頂部固定的代碼:html
<div data-role="header" data-position="fixed"> <a href="#Home" data-icon="back" data-direction="reverse" data-transition="slide" >返回</a> <h1> 複合大城 </h1> <a href="#Home" data-icon="home" data-iconpos="notext" data-direction="reverse" data-transition="slide" class="ui-btn-right">首頁</a> <div class="segmented-control ui-bar-d"> <div data-role="controlgroup" data-type="horizontal" id="fhdcList"> <a href="#" class="ui-btn-active" data-role="button">非凡血統</a> <a href="#" data-role="button" >完美規劃</a> <a href="#" data-role="button" >大城崛起</a> <a href="#" data-role="button" >商學院</a> </div> </div> </div>
這樣的效果在表現上已接近原生效果。html5
可是若是在真機打包模式下(而且全部Page放在一個Html文件中),會發現若是先後兩張頁面都採用了固定頭部,在Slide過場效果下,第一次切換會先只顯示下一張Page的頭部覆蓋當前Page,再切換到下一張,而並不是第二張Page完整顯示。 爲了不這種狀況,能夠將第一張Page的頭部的fix屬性去掉。對於通常的軟件,若是隻有兩層內容深度,那麼只要首頁的頂部不固定便可。(對於此問題嘗試增長DOM緩存等都無效,僅測試出這個解決方案)java
對於a標記的點擊導航,默認是在onclick事件中處理的。而移動客戶端對onclick的響應相比PC瀏覽器有着明顯的幾百毫秒延遲。jquery
在移動瀏覽器中對觸摸事件的響應順序應當是: ontouchstart -> ontouchmove -> ontouchend -> onclickweb
所以,若是確實要加快對點擊事件的響應,就應當綁定ontouchend事件。瀏覽器
若是不用jQueryMobile,能夠考慮用第三方的腳本,例如 http://cubiq.org/remove-onclick-delay-on-webkit-for-iphone 。而那個地址中的代碼不支持Android,能夠考慮採用評論中的代碼。這個腳本主要考慮到ontouchstart和ontouchend的觸摸點位移,確保不會在用戶滑動(swipe)畫面後觸發到點擊事件。緩存
對於使用jQueryMobile的人來講就幸運不少了,使用內置的tap事件便可在ontouchend事件環節捕獲到被點擊的請求,這個方法的響應時間明顯快於onclick事件。代碼範例以下:網絡
$("#fhdclink").live('tap',function(event) { $.mobile.changePage($("#fhdc"), { transition: 'slide', reverse: false } ); return false; });
$(document).bind("mobileinit",function() { $.mobile.loadingMessage = '頁面載入中'; $.mobile.pageLoadErrorMessage = '頁面載入失敗'; });
<script data-minified="true" src="js/jquery.min.js"></script> <script type="text/javascript" charset="utf-8" src="js/cordova.js"></script> <script type="text/javascript" charset="utf-8"> $(document).bind("mobileinit",function() { $.support.cors = true; $.mobile.allowCrossDomainPages=true; }); document.addEventListener("deviceready", onDeviceReady, false); function onDeviceReady() { // Register the event listener document.addEventListener("backbutton", onBackKeyDown, false); } function onBackKeyDown() { history.back(); return false; } </script> <script data-minified="true" src="js/jquery.mobile-1.1.0.min.js"></script>
使用jQuery的選擇器,在PC環境下效果比較理想,但在手機環境下DOM選擇會比較卡,若是選擇器使用頻繁,會形成用戶UI響應變化滯後。 jQuery默認不會緩存DOM選擇,每次使用選擇器都會從根節點進行檢索,所以,強烈建議緩存DOM選擇結果。
例如標籤頁效果,未優化前:
$("#fhdcList a").each(function(index){ $(this).click(function(){ $("#fhdcList a.ui-btn-active").removeClass("ui-btn-active"); $("#fhdcList a:eq(" + index + ")").addClass("ui-btn-active"); $(".fhdcTab:visible").hide(); $(".fhdcTab:eq(" + index + ")").show(); }); });
這樣在循環時每一句語句都會對DOM樹從頭至尾查找一遍。在PC環境下看不出時延,但在手機環境下切換時明顯有點卡。這須要優化:
var tab = $(".fhdcTab"); var listdiv = $("#fhdcList"); listdiv.find("a").each(function(index){ $(this).live('tap',function(event) { listdiv.find("a.ui-btn-active").removeClass("ui-btn-active"); tab.hide(); tab.eq(index).show(); listdiv.find("a:eq(" + index + ")").addClass("ui-btn-active"); }); });