CHAPTER 12 - jQuery Mobile 教學 ( 基礎 )

前面幾個章節,介紹完所有 EZoApp 的元件,雖然說直接利用元件,已經可以做出不少應用,但如果要深入的做些什麼,總還是覺得光靠元件仍然不太夠力,因此,接下來的章節,將會開始一步步的介紹一些程式,也希望大家在閱讀完成之後,也能夠掌握程式撰寫的能力。

一開始將先由 jQuery Mobile 著手介紹,畢竟 jQuery Mobile 是 EZoApp 的核心功能之一,掌握 jQuery Mobile,至少就能做出大部份的 App 了,以下會介紹的程式,大家可能會有點眼熟,因為在 Chapter 4 - jQuery Mobile 元件 裡頭有介紹過,不過當時是用元件的方式自動產生,而現在是直接撰寫程式,產生元件。

如果大家對於 jQuery Mobile 有更多的興趣,也可以前往 jQuery Mobile 官方網站 了解更多。

這篇文章會介紹到的 jQuery Mobile:

page button grid Input theme
header & footer navbar radio-button checkbox flip-switch
list-view table




1. 什麼是 jQuery Mobile?

以往的網頁應用程式介面,其實大部分都不太適合行動裝置使用,畫面不是過大,就是因為內容過多而導致載入速度不佳,甚至是瀏覽方式不適合行動式裝置導致顯示錯亂,因此,jQuery 就推出一套新的函式庫:jQuery Mobile。( 想學習 jQuery 的可以參考:W3school jQuery 教程 )

簡單的說,jQuery Mobile 希望能夠統一市面上常見行動裝置的使用者介面系統。它是一個有彈性且易主題化的一個輕量級函式庫,希望讓各種行動裝置的瀏覽器都能夠支援,就如同對於桌上型的瀏覽器一般,並且在使用網頁時,能夠以接近一般原生應用程式的經驗來操作。

jQuery Mobile 具備以下幾個特色:

  • 以 jQuery 為核心
  • 輕量化檔案
  • Html5 Markup-driven
  • 自動切換排版
  • 支援滑鼠與觸碰事件
  • WAI-ARIA
  • 強大的佈景主題系統
  • ASP.NET MVC 的支援
  • 支援市面上大部分行動裝置
  • 畫面的一致化
  • 多樣化的 UI



2. jQuery Mobile 的『起手勢』?

一個 jQuery Mobile 的結構通常會預先載入兩個 javascript 一個 CSS,分別是 jquery.min.jsjquery.mobile.min.js 以及 jquery.mobile.min.css,不過 EZoApp 已經都幫你預載好了,所以不用擔心。

<link rel="stylesheet" href="jquery.mobile.min.css">
<script src="jquery.min.js"></script>
<script src="jquery.mobile.min.js"></script>


預載的 js 都會放在 HTML 的 header 裡頭,而 body 裏面會是由一個個的 page 組成 ( 想像一下手機一頁一頁切換 ),每個 page 內通常會有 header、footer 和 ui-content 這三個 div 區塊,而內容通常也都會放在 ui-content 這個 div 區塊裡頭。

<head>
  <title>jQuery Mobile</title>
  <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a1/jquery.mobile.min.css">
  <script src="http://code.jquery.com/jquery-1.4.3.min.js"></script>
  <script src="http://code.jquery.com/mobile/1.0a1/jquery.mobile.min.js"></script>
</head>
<body>
  <div data-role="page">  // page
    <div data-role="header">  // header
      <h1>header</h1>
    </div>
    <div class="ui-content">  // ui-content
      <p>content</p>
    </div>
    <div data-role="footer">  // footer
      <h4>footer</h4>
    </div>
  </div>
</body>



3. page

一個 jQuery Mobile 通常會有多個 page,不過就算有很多個 page,一次也只會顯示其中一頁,而 page 是使用 id 進行區隔。( id 不能重複 )

<div id="page1" data-role="page">
  <div role="main" class="ui-content"></div>
</div>
<div id="page2" data-role="page">
  <div role="main" class="ui-content"></div>
</div>
<div id="page3" data-role="page">
  <div role="main" class="ui-content"></div>
</div>

page 之間的切換,可以利用 href,直接切換到指定的 page Id,並利用 使用 data-transition 設定切換效果,或設定 data-rel="back" 用同樣效果返回。

page 具有以下幾種切換效果: ( 範例:http://jqmdesigner.appspot.com/designer.html#&ref=5744498495717376 )

  • default:預設值 ( fade )
  • fade:淡入淡出 ( 預設值 )
  • flip:翻轉
  • flow :流動切換效果
  • pop:彈出窗口顯示
  • slide:左右滑動切換
  • slidefade:左右滑動 + 淡入淡出切換
  • slideup:由上而下滑動切換
  • slidedown:由下而上滑動切換
  • turn:轉向下一頁
  • none:直接切換



4. button

button 有兩種,分別是用 a 來產生,或直接用 button 來創造,但不論用哪種方式,都必須加上 class="ui-btn"

<a href="#" class="ui-btn">Anchor</a>
<button class="ui-btn">Button</button>

讓按鈕水平排列:

<a href="#" class="ui-btn ui-btn-inline">Anchor</a>
<button class="ui-btn ui-btn-inline">Button</button>

使用 class 產生按鈕 icon: ( 範例:http://jqmdesigner.appspot.com/designer.html#&ref=5179018739449856 ):

<button class="ui-btn ui-btn-icon-left ui-icon-action">action</button>
<button class="ui-btn ui-btn-icon-left ui-icon-alert">alert</button>
<button class="ui-btn ui-btn-icon-up ui-icon-arrow-d">arrow-d</button>
<button class="ui-btn ui-btn-icon-right ui-icon-arrow-d-l">arrow-d-l</button>
<button class="ui-btn ui-btn-icon-bottom ui-icon-arrow-d-r">arrow-d-r</button>
<button class="ui-btn ui-btn-icon-left ui-icon-arrow-l">arrow-l</button>



5. grid

在 div 裡頭放上 class,就能使其變成類似表格的 grid,而 grid 裡頭還可以放 grid。( ui-grid-a : 兩格,ui-grid-b:三格,ui-grid-c:四格,ui-grid-d:五格 ) ( 範例:http://jqmdesigner.appspot.com/designer.html#&ref=5708449694351360 )

<div class="ui-grid-b">
  <div class="ui-block-a">Block A</div>
  <div class="ui-block-b">Block B</div>
  <div class="ui-block-c">Block C</div>
</div>



6. Input

文字輸入欄位,藉由不同的 type,可以定義不同的輸入欄位,例如純文字、密碼或搜尋...等。 ( 範例:http://jqmdesigner.appspot.com/designer.html#&ref=6239106661089280 )

<div class="ui-field-contain">
  <label for="#text_id">Title</label>
<input type="text" name="" id="#text_id">
</div>
<div class="ui-field-contain">
  <label for="#textarea_id">Title</label>
  <textarea name="" id="#textarea_id"></textarea>
</div>
<div class="ui-field-contain">
  <label for="#search_id">Title</label>
  <input type="search" name="" id="#search_id">
</div>



7. theme

jQuery Mobile 提供了兩種主題樣式供我們使用,分別用 a 和 b 表示,同樣是利用 class 來進行區隔。 ( 範例:http://jqmdesigner.appspot.com/designer.html#&ref=5684843815895040 )

按鈕:

<a href="#" class="ui-btn ui-btn-a">Theme A</a>
<a href="#" class="ui-btn ui-btn-b">Theme B</a>

navbar:

<div data-role="navbar">
  <ul>
    <li><a data-theme="a">Theme A</a></li>
    <li><a data-theme="b">Theme B</a></li>
  </ul>
</div>



header 與 footer 是在 App 畫面設計中很常見的元素,而在 jQuery Mobile 裡頭是使用『data attribute』來進行定義 ( 完整的 jQuery Mobile data attribute 參考:http://api.jquerymobile.com/data-attribute/ ),而位置是否固定,則是使用『data-position』來定義。 ( 範例:http://jqmdesigner.appspot.com/designer.html#&ref=5674388254883840 )

<div data-role="header" data-position="fixed">
  <h1>header</h1>
</div>

<div data-role="footer" data-position="fixed">
  <h4>footer</h4>
</div>



9. navbar

導航列選單,基本上一列只會有五個欄位,畢竟是在手機裝置上操作,超過五個欄位手指就會不方便點擊,所以最多一列五個欄位,若超過,則會變成一列兩個欄位依序排列下去。 ( 範例:http://jqmdesigner.appspot.com/designer.html#&ref=5121893862473728 )

<div data-role="navbar">
  <ul>
    <li><a href="#">One</a></li>
    <li><a href="#">Two</a></li>
  </ul>
</div>



10. radio-button

『單選』的按鈕,在 jQuery Mobile 裡頭,若為垂直排列 ( data-type="vertical" ),則會是圓形可點選,若是水平排列 ( data-type="horizontal" ),則是矩形按鈕的樣式,如果遇到變成複選的情況,可以檢查看看 name 是否重複,重複就會變成可複選的情形。 ( 範例:http://jqmdesigner.appspot.com/designer.html#&ref=5734958769373184 )

<form>
  <fieldset data-role="controlgroup" data-type="horizontal">
    <legend>Horizontal:</legend>
    <input type="radio" name="radio-choice-h-2" id="radio-choice-h-2a" value="on" checked="checked">
    <label for="radio-choice-h-2a">One</label>
    <input type="radio" name="radio-choice-h-2" id="radio-choice-h-2b" value="off">
    <label for="radio-choice-h-2b">Two</label>
    <input type="radio" name="radio-choice-h-2" id="radio-choice-h-2c" value="other">
    <label for="radio-choice-h-2c">Three</label>
  </fieldset>
</form>



11. checkbox

『複選』的按鈕,,在 jQuery Mobile 裡頭,若為垂直排列 ( data-type="vertical" ),則會是小正方形可勾選,若是水平排列 ( data-type="horizontal" ),則是矩形按鈕的樣式。 ( 範例:http://jqmdesigner.appspot.com/designer.html#&ref=5752591019409408 )

<form>
  <fieldset data-role="controlgroup">
    <legend>Vertical:</legend>
    <input type="checkbox" name="checkbox-v-2a" id="checkbox-v-2a">
    <label for="checkbox-v-2a">One</label>
    <input type="checkbox" name="checkbox-v-2b" id="checkbox-v-2b">
    <label for="checkbox-v-2b">Two</label>
    <input type="checkbox" name="checkbox-v-2c" id="checkbox-v-2c">
    <label for="checkbox-v-2c">Three</label>
  </fieldset>
</form>



12. flip-switch

按鈕的開關,如果直接看程式碼,可以發現他其實就是一個 select 的概念。 ( 範例:http://jqmdesigner.appspot.com/designer.html#&ref=6247793769316352 )

<form>
  <label for="flip-2">Flip toggle switch:</label>
  <select name="flip-2" id="flip-2" data-role="flipswitch" data-theme="b">
    <option value="off">Off</option>
    <option value="on">On</option>
  </select>
</form>



13. list-view

清單,也就是 HTML 裡的 ul 和 li,若 li 設定為『 data-role="list-divider" 』,該 li 就會變成類似標題的分隔符號,除此之外,清單也可以使用 filter 的功能 ( data-filter="true" ),在最上方加入一個類似搜尋的欄位。 ( 範例:http://jqmdesigner.appspot.com/designer.html#&ref=5709117897310208 )

<ul data-role="listview" data-inset="true" data-divider-theme="a" data-filter="true">
  <li data-role="list-divider">Mail</li>
  <li>
    <a href="#">Inbox</a>
  </li>
  <li>
    <a href="#">Outbox</a>
  </li>
  <li data-role="list-divider">Contacts</li>
  <li>
    <a href="#">Friends</a>
  </li>
  <li>
    <a href="#">Work</a>
  </li>
</ul>



14. table

表格,有別于一般的表格,jQuery Mobile 還設計了一個按鈕讓我們點選快速瀏覽欄位,設定 data-mode="columntoggle" 就會出現。 ( 範例:http://jqmdesigner.appspot.com/designer.html#&ref=5749505286733824 )

<table data-role="table" id="table-column-toggle" data-mode="columntoggle" class="ui-responsive table-stroke">
  <thead>
    內容省略
  </thead>
  <tbody>
    內容省略
  </tbody>
</table>





繼續閱讀 Chapter 13 - jQuery Mobile 教學 ( 事件 )
回文章目錄

results matching ""

    No results matching ""