Android+Jquery Mobile學習系列(2)-HTML5/Jquery Mobile基礎

本章介紹兩個關鍵字[HTML5]和[Jquery Mobile],簡單說這二者的關係是:HTML5做爲主體,Jquery Mobile在HTML5的基礎上對其進行了優化、裝飾。javascript

 

  • HTML5

HTML5你們早就不陌生了,HTML最新版本,提供了不少富客戶端功能支持,可是在臺式系統由於受到某些瀏覽器限制發展緩慢,而移動設備由於沒有舊包袱,全部廠家都在向HTML5靠齊,所以移動設備(特別是最新的設備)的瀏覽器對HTML5支持度很是高。因此大多數智能移動設備上都能跑HTML5應用。css

 

關於HTML5,並非你想像中的那麼神祕。說白了,HTML5功能也是由HTML標籤來實現,只是這些標籤之前沒有出現過,你能夠像之前編寫普通html頁面那樣添加上HTML5某些新特性標籤,而後在支持HTML5的瀏覽器(好比chrome)上運行。想比較全面瞭解HTML5,我建議新手花一兩個小時過一遍w3cschool的HTML5教程,很是簡潔,可是能讓你瞭解什麼叫HTML5。html

 

 

  • JQuery Mobile

jQuery Mobile是用於建立移動web應用的前端開發框架,可使用於智能手機與平板電腦,它使用 HTML5 & CSS3 最小的腳原本佈局網頁。你們都知道,HTML原生的控件並非那麼「炫」,Jquery Mobile的主要做用之一是幫助不懂UI的開發人員讓本身的HTML有「炫」的感受。另外Jquery Mobile對HTML還提供了一些性能上的優化(好比Ajax轉場,提升頁面切換速度),而且提供了一些新的js事件供開發者調用。注:Jquery Mobile依賴於Jquery,因此HTML須要引用Jquery。前端

 

Jquery Mobile須要學習的內容蠻多的,我建議新手全面地過一遍Jquery Mobile的教程再作應用,我除了看w3cschool的教程外,還看了這位做者的文章,最近還發現Jquer Mobile中文API網站也很不錯。html5

 

 

  • 簡單示例

首先到jquery mobile官網下載本身須要的版本,默認下載下來的文件包含Jquery Mobile和Jquery的js,同時也提供了不少Demo供參考。java

注:*.min.*系列是壓縮過的文件,文件大小要比完整源碼小不少,應用正式上線時最好用min文件,可以提升頁面加載文件效率。
jquery


而後隨意建一個HTML文件,注意頁面頭部要有<!DOCTYPE html>標籤,頁面引用如下三個必備文件(文件位置根據你的HTML相對位置來決定)。web

 

Html代碼   收藏代碼
  1. <link rel="stylesheet" href="../scripts/jquery.mobile-1.3.2/jquery.mobile-1.3.2.min.css" type="text/css">  
  2. <script src="../scripts/jquery.mobile-1.3.2/jquery.js" type="text/javascript" ></script>  
  3. <script src="../scripts/jquery.mobile-1.3.2/jquery.mobile-1.3.2.min.js" type="text/javascript" ></script>  

 

 

 

在<Body>標籤中編寫頁面元素,跟傳統的HTML有所不一樣的是,jquery mobile把一個<div data-role="page">當作一個頁面,在page中能夠定義三個主體區:頭部header、內容區content和底部footer,一個簡單的示例以下。chrome

 

Html代碼   收藏代碼
  1. <body>  
  2. <div data-role="page">  
  3.   
  4.   <div data-role="header">  
  5.     <h1>歡迎來到個人主頁</h1>  
  6.   </div>  
  7.   
  8.   <div data-role="content">  
  9.     <p>我如今是一個移動端開發者!!</p>  
  10.   </div>  
  11.   
  12.   <div data-role="footer">  
  13.     <h1>底部文本</h1>  
  14.   </div>  
  15.   
  16. </div>  
  17. </body>  

 

 

 

 

 

前面說了一個<div data-role="page">標籤表示一個頁面,那麼jquery mobile支持一個<body>標籤中存在多個page,它們的ID必定要不一樣,便於區分。頁面初次加載時,默認只顯示第一個page!而多個頁面切換很是簡單,只須要在跳轉連接中加[#目標page的ID]便可。以下代碼實現的功能是:點擊[頁面②]連接後頁面切換到id爲pagetwo的頁面,而後點擊[頁面①],又會回到pageone頁面。api

 

Html代碼   收藏代碼
  1. <div data-role="page" id="pageone">  
  2.   <div data-role="content">  
  3.     <href="#pagetwo">頁面②</a>  
  4.   </div>  
  5. </div>  
  6.   
  7. <div data-role="page" id="pagetwo">  
  8.   <div data-role="content">  
  9.     <href="#pageone">頁面①</a>  
  10.   </div>  
  11. </div>  

 

 

 

若是要讓第二個頁面以dialog彈出框的形式顯示,則只須要在跳轉的<a>標籤中增長一個屬性[data-rel="dialog"]。不過若是pagetwo只有一個data-role=content內容區的話,彈出框是沒有關閉按鈕的,因此你須要給pagetwo定義一個header。

 

Html代碼   收藏代碼
  1. <div data-role="page" id="pageone">  
  2.   <div data-role="content">  
  3.     <p>Welcome!</p>  
  4.     <href="#pagetwo" data-rel="dialog">頁面②</a>  
  5.   </div>  
  6. </div>   
  7.   
  8. <div data-role="page" id="pagetwo">  
  9.   <div data-role="header">  
  10.     <h1></h1>  
  11.   </div>  
  12.   
  13.   <div data-role="content">  
  14.     <p>Goodbye!</p>  
  15.     <href="#pageone">頁面①</a>  
  16.   </div>  
  17. </div>   


  

 

 

至於其它jquery mobile控件,這裏就不贅述了,你們能夠自行去相關教程網站學習瞭解。

 

下面介紹一點jquery mobile的事件和方法。

 

jquery mobile用得最多的事件恐怕是pageinit,這個是指定page加載完成時調用的。而jquery的ready()反而用得比較少(這個後面章節說)。

 

Js代碼   收藏代碼
  1. $(document).on("pageinit","#pageone",function(){  
  2.   alert("頁面初始化");  
  3. });  

 

而後還有一些好玩的屏幕左右滑動事件和上下滾動事件。

 

 

Js代碼   收藏代碼
  1. $(document).on("swipeleft",function(){  
  2.     alert("向左滑動");  
  3. });  
  4. $(document).on("swiperight","#pagethree",function(){  
  5.     alert("向右滑動");  
  6. });  
  7. $(document).on("scrollstart",function(){//關聯事件:scrollstop  
  8.     //滾動頁面   注:不論上下滑動 仍是左右滑動都會觸發  
  9. });  

 

還有一個是頁面轉場時用到的pagebeforechange事件,用於給第二個頁面進行參數傳遞,你只要輸入pagebeforechange關鍵字,網上全是說它進行參數傳遞的文章。

 

 

Js代碼   收藏代碼
  1. $(document).unbind("pagebeforechange").bind("pagebeforechange", function(e, data) {  
  2.   
  3. });  

 

 

傳統頁面的跳轉多是經過window.location來完成,jquery mobile提供了自帶的轉場方法,這種跳轉是經過Ajax加載第二個頁面,從速度上要比第一個高,可是用這種方式要注意不少問題(這個後面文章說明)。

Js代碼   收藏代碼
  1. $.mobile.changePage("xx/two.html")  

 注:若是使用<a href="xx/tow.html">的形式到下一頁,默認也是使用jquery mobile的changePage跳轉的。

 

 

下面來一個完整的示例,這個示例在chrome下就看獲得效果,下面代碼中有不少註釋說明,你們自行消化理解吧。

Html代碼   收藏代碼
  1. <!DOCTYPE html>  
  2. <html>  
  3.   <head>  
  4.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>  
  5.     <!-- 移動設備全屏 -->  
  6.     <meta name="viewport" content="width=device-width, initial-scale=1">  
  7.     <link rel="stylesheet" href="../../scripts/jquery.mobile-1.3.2/jquery.mobile-1.3.2.min.css" type="text/css">  
  8.     <script src="../../scripts/jquery.mobile-1.3.2/jquery.js" type="text/javascript" >  
  9.     </script>  
  10.     <script src="../../scripts/jquery.mobile-1.3.2/jquery.mobile-1.3.2.min.js" type="text/javascript" >  
  11.     </script>  
  12.     <script src="../../scripts/bless.ui.core.js" type="text/javascript" >  
  13.     </script>  
  14.     <title>  
  15.     </title>  
  16.     <script type="text/javascript">  
  17.       $(document).on("pageinit","#pageone",function(){  
  18.         alert("頁面初始化");  
  19.         });  
  20.           </script>  
  21.         </head>  
  22.         <body>  
  23.           <div data-role="page" id="pageone">  
  24.             <!-- 頭部信息 -->  
  25.             <!-- data-position="fixed"固定位置 不隨上下滑動而變化 -->  
  26.             <!-- data-fullscreen="true"雙擊屏幕後隱藏該部位,注意若是這樣設置則會覆蓋掉一部分content -->  
  27.             <div data-role="header" data-position="fixed">  
  28.               <!-- data-direction="reverse"反向操做,即從page1正向滑動過來,則本動畫會反向滑動回page1 -->  
  29.               <href="#" id="changePage" data-icon="arrow-l" data-transition="slide" data-direction="reverse">  
  30.                 返回  
  31.               </a>  
  32.               <h1>  
  33.                 歡迎訪問個人主頁  
  34.               </h1>  
  35.   
  36.               <!-- 導航欄Tabs  參考:http://w3school.com.cn/jquerymobile/jquerymobile_navbars.asp -->  
  37.               <div data-role="navbar">  
  38.                 <ul>  
  39.                   <!-- class="ui-btn-active"選中狀態 -->  
  40.                   <li>  
  41.                   <href="#pageone" class="ui-btn-active">  
  42.                     首頁  
  43.                   </a>  
  44.                 </li>  
  45.                 <!-- data-rel="dialog"讓頁面以彈出框的形式顯示 -->  
  46.                 <li>  
  47.                 <href="#pagetwo" data-rel="dialog">  
  48.                   頁面二  
  49.                 </a>  
  50.               </li>  
  51.             </ul>  
  52.           </div>  
  53.         </div>  
  54.   
  55.         <!-- 內容區信息 -->  
  56.         <div data-role="content">  
  57.           <form method="post" action="#">  
  58.             <div data-role="fieldcontain">  
  59.               <input type="hidden" name="id" id="id">  
  60.               <input type="hidden" name="deleteFlag" id="deleteFlag">  
  61.               <input type="hidden" name="userType" id="userType">  
  62.               <label for="name">  
  63.                 姓名:  
  64.               </label>  
  65.               <input type="text" name="name" id="name" placeholder="您的姓名...">  
  66.               <br>  
  67.   
  68.               <label for="sex">  
  69.                 性別:  
  70.               </label>  
  71.               <input type="radio" name="sex" id="mail" value="1" checked="checked">  
  72.               <label for="mail">  
  73.                 男  
  74.               </label>  
  75.               <input type="radio" name="sex" id="femail" value="2">  
  76.               <label for="femail">  
  77.                 女  
  78.               </label>  
  79.               <br>  
  80.   
  81.               <label for="birthday">  
  82.                 生日:  
  83.               </label>  
  84.               <input type="date" name="birthday" id="birthday" >  
  85.               <br>  
  86.   
  87.               <label for="mobilePhone">  
  88.                 手機號碼:  
  89.               </label>  
  90.               <input type="text" data-clear-btn="true" name="mobilePhone" id="mobilePhone" placeholder="您的手機號碼...">  
  91.               <br>  
  92.   
  93.               <label for="email">  
  94.                 電子郵箱:  
  95.               </label>  
  96.               <input type="email" data-clear-btn="true" name="email" id="email" placeholder="您的電子郵箱...">  
  97.               <br>  
  98.             </div>  
  99.             <input type="button" id="save" data-inline="true" value="提交">  
  100.           </form>  
  101.         </div>  
  102.   
  103.         <div data-role="footer">  
  104.           <h1>  
  105.             頁腳文本  
  106.           </h1>  
  107.         </div>  
  108.       </div>  
  109.   
  110.       <div data-role="page" id="pagetwo">  
  111.         <div data-role="header">  
  112.           <h1>  
  113.             頁面2  
  114.           </h1>  
  115.         </div>  
  116.   
  117.         <div data-role="content">  
  118.           <p>  
  119.             這是頁面2  
  120.           </p>  
  121.         </div>  
  122.   
  123.         <div data-role="footer">  
  124.           <h1>  
  125.             頁腳文本  
  126.           </h1>  
  127.         </div>  
  128.       </div>  
  129.   
  130.     </body>  
  131.   </html>  

 

 

 

 

 

  • 注意事項

這段是2014-4-14補充。

在愈來愈深刻的開發學習中,發現了jquery mobile不少須要注意的地方,這裏統一說明。

一、全部HTML元素幾乎都被jquery mobile更改過,由於JQM在作頁面渲染的時候,爲了使樣式跟客戶端程序類似, 隱藏了原始的標籤而後用一些新的標籤和自定義的樣式來表現原標籤,其實新樣式的標籤已經不是原來的標籤。

好比頁面有一個ListView,你想經過javascript動態append一個新的ListView,這時最終效果絕對不是JqueryMobile提供的那種樣式(這個能夠經過桌面瀏覽器看代碼知道)。要想讓動態建立的元素被Jquery Mobile渲染,就必須調用它提供的一些方法來刷新當前組件。具體的內容可參考這個博客《jQuery Mobile動態刷新頁面樣式

 

二、移動設備javascript調試問題,在開發中常常會有一些javascript錯誤,最頭疼的是不知道怎麼調試,若是手機也有「開發者調試模式」就行了,惋惜沒有!根據我目前的經驗,調試能夠用兩種方法:一個拷貝代碼到電腦,經過PC瀏覽器來調試;另外一個看LogCat日誌,javascript報錯都會在日誌中體現,以下圖所示,首先看錯誤信息是什麼,而後看錯誤文件在哪兒,最後一個關鍵是看提示在文件哪一行出問題,而後你就能夠跟過去看問題所在了。下圖異常緣由是bless.insurer.js文件第25行,名爲"DOM"的對象不存在。


 

 三、對於動態操做Button按鈕,最好使用<a>標籤來實現,而<input type="button">徹底不推薦,由於jquery mobile爲了渲染出按鈕的樣式,會把input button隱藏,而用div來替代其內容,這時開發人員想經過javascript來隱藏/顯示/更改按鈕文字的話,是沒效果的。

對按鈕的經常使用操做以下:

Js代碼   收藏代碼
  1. <!-- <a href="javascript:void(0);" data-role="button" id="save">新增</a> -->  
  2. $("#save").hide(); //隱藏按鈕  
  3. $("#save").show(); //顯示按鈕  
  4. $("#save").find(".ui-btn-text").html("修改"); //修改按鈕文字  
  5.   
  6. $("body").append("<a href=\"javascript:void(0);\" data-role=\"button\" id=\"del\">刪除</a>")  
  7. $("#del").button();//動態新增一個按鈕  

 

 

 

HTMl5和JQuery Mobile內容很是豐富,這裏展現的只是冰山一角,我也知道得很少,但願在後面項目開發中積累更多的知識。

相關文章
相關標籤/搜索