jQuery Mobile 學習(三)

繼續我們移動端的學習,今天到了List相關了。

本文例子請使用手機查看

在移動設備平臺下,由於移動設備屏幕比較小,我們又是用手在上面點擊的觸屏方式,傳統的列表模式在手機上就不太友好了。

雖然HTML5與CSS3提供了強大的界面實現方案,jquery mobile作爲jquery框架的一個移動web插件,他根據移動屏幕大小優化了UI組件,

列表組件就是jquery mobile根據移動設備的特性而實現的組件庫之一。

我們來一個個看看我們的列表吧

普通鏈接列表

 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <title></title>
 5     <meta name="viewport" content="width=device-width, initial-scale=1">
 6     <link id="jquerymobile_120" rel="stylesheet" type="text/css" class="library" 
 7     href="/js/sandbox/jquery-mobile/jquery.mobile-1.2.0/jquery.mobile-1.2.0.css">
 8     <script id="jquery_182" type="text/javascript" class="library" 
 9     src="/js/sandbox/jquery/jquery-1.8.2.min.js"></script>
10     <script id="jquerymobile_120" type="text/javascript" class="library" 
11     src="/js/sandbox/jquery-mobile/jquery.mobile-1.2.0/jquery.mobile-1.2.0.min.js"></script>
12 </head>
13 <body>
14     <div data-role="page">
15         <header data-role="header">
16             <h1>
17                 普通鏈接列表</h1>
18         </header>
19         <div data-role="content">
20             <ul data-role="listview" data-theme="g">
21                 <li><a href="01.htm">刀狂劍癡葉小釵</a> </li>
22                 <li><a href="01.htm">刀狂劍癡葉小釵</a> </li>
23                 <li><a href="01.htm">刀狂劍癡葉小釵</a> </li>
24                 <li><a href="01.htm">刀狂劍癡葉小釵</a> </li>
25                 <li><a href="01.htm">刀狂劍癡葉小釵</a> </li>
26             </ul>
27         </div>
28     </div>
29 </body>
30 </html>

http://sandbox.runjs.cn/show/icriwnze

多層次嵌套列表

 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <title></title>
 5     <meta name="viewport" content="width=device-width, initial-scale=1">
 6     <link id="jquerymobile_120" rel="stylesheet" type="text/css" class="library" 
 7     href="/js/sandbox/jquery-mobile/jquery.mobile-1.2.0/jquery.mobile-1.2.0.css">
 8     <script id="jquery_182" type="text/javascript" class="library" 
 9     src="/js/sandbox/jquery/jquery-1.8.2.min.js"></script>
10     <script id="jquerymobile_120" type="text/javascript" class="library" 
11     src="/js/sandbox/jquery-mobile/jquery.mobile-1.2.0/jquery.mobile-1.2.0.min.js"></script>
12 </head>
13 <body>
14     <div data-role="page">
15         <header data-role="header">
16             <h1>
17                 普通鏈接列表</h1>
18         </header>
19         <div data-role="content">
20             <ul data-role="listview" data-theme="g">
21                 <li><a href="01.htm">刀狂劍癡葉小釵</a>
22                     <p>
23                         子級list</p>
24                     <ul>
25                         <li><a href="01.htm">清香白蓮素還真</a></li>
26                         <li><a href="01.htm">清香白蓮素還真</a></li>
27                     </ul>
28                 </li>
29                 <li><a href="01.htm">刀狂劍癡葉小釵</a> </li>
30                 <li><a href="01.htm">刀狂劍癡葉小釵</a>
31                     <p>
32                         子級list</p>
33                     <ul>
34                         <li><a href="01.htm">清香白蓮素還真</a></li>
35                         <li><a href="01.htm">清香白蓮素還真</a></li>
36                     </ul>
37                 </li>
38                 <li><a href="01.htm">刀狂劍癡葉小釵</a> </li>
39                 <li><a href="01.htm">刀狂劍癡葉小釵</a> </li>
40             </ul>
41         </div>
42     </div>
43 </body>
44 </html>

http://sandbox.runjs.cn/show/wc1n0sto

這個嵌套列表,我們點擊第一個後便可以看到這個啦。

列表分隔符

我們有時候會碰到需要對列表進行分組的功能,具有分組效果的列表可以在li元素上設置data-role屬性爲list-divider來實現。

 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <title></title>
 5     <meta name="viewport" content="width=device-width, initial-scale=1">
 6     <link id="jquerymobile_120" rel="stylesheet" type="text/css" class="library" 
 7     href="/js/sandbox/jquery-mobile/jquery.mobile-1.2.0/jquery.mobile-1.2.0.css">
 8     <script id="jquery_182" type="text/javascript" class="library" 
 9     src="/js/sandbox/jquery/jquery-1.8.2.min.js"></script>
10     <script id="jquerymobile_120" type="text/javascript" class="library" 
11     src="/js/sandbox/jquery-mobile/jquery.mobile-1.2.0/jquery.mobile-1.2.0.min.js"></script>
12 </head>
13 <body>
14     <div data-role="page">
15         <header data-role="header">
16             <h1>
17                 列表分割</h1>
18         </header>
19         <div data-role="content">
20             <ul data-role="listview" data-theme="g">
21                 <li data-role="list-divider">霹靂三巨頭</li>
22                 <li><a href="01.htm">清香白蓮素還真</a> </li>
23                 <li><a href="01.htm">百世經綸一頁書</a> </li>
24                 <li><a href="01.htm">刀狂劍癡葉小釵</a> </li>
25                 <li data-role="list-divider">火影三巨頭</li>
26                 <li><a href="01.htm">宇智波斑</a> </li>
27                 <li><a href="01.htm">初代火影</a> </li>
28                 <li><a href="01.htm">六道仙人</a> </li>
29                 <li data-role="list-divider">金光三巨頭</li>
30                 <li><a href="01.htm">史豔文</a> </li>
31                 <li><a href="01.htm">藏鏡人</a> </li>
32                 <li><a href="01.htm">黑白郎君南宮很</a> </li>
33             </ul>
34         </div>
35     </div>
36 </body>
37 </html>

http://sandbox.runjs.cn/show/x34523jv

列表搜索

當設置data-filter爲true時便具有了搜索功能了

 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <title></title>
 5     <meta name="viewport" content="width=device-width, initial-scale=1">
 6     <link id="jquerymobile_120" rel="stylesheet" type="text/css" class="library" 
 7     href="/js/sandbox/jquery-mobile/jquery.mobile-1.2.0/jquery.mobile-1.2.0.css">
 8     <script id="jquery_182" type="text/javascript" class="library" 
 9     src="/js/sandbox/jquery/jquery-1.8.2.min.js"></script>
10     <script id="jquerymobile_120" type="text/javascript" class="library" 
11     src="/js/sandbox/jquery-mobile/jquery.mobile-1.2.0/jquery.mobile-1.2.0.min.js"></script>
12 </head>
13 <body>
14     <div data-role="page">
15         <header data-role="header">
16             <h1>
17                 列表分割</h1>
18         </header>
19         <div data-role="content">
20             <ul data-role="listview" data-theme="g" data-filter="true">
21                 <li><a href="01.htm">清香白蓮素還真</a> </li>
22                 <li><a href="01.htm">百世經綸一頁書</a> </li>
23                 <li><a href="01.htm">刀狂劍癡葉小釵</a> </li>
24                 <li><a href="01.htm">宇智波斑</a> </li>
25                 <li><a href="01.htm">初代火影</a> </li>
26                 <li><a href="01.htm">六道仙人</a> </li>
27                 <li><a href="01.htm">史豔文</a> </li>
28                 <li><a href="01.htm">藏鏡人</a> </li>
29                 <li><a href="01.htm">黑白郎君南宮很</a> </li>
30                 <li><a href="01.htm">清香白蓮素還真</a> </li>
31                 <li><a href="01.htm">百世經綸一頁書</a> </li>
32                 <li><a href="01.htm">刀狂劍癡葉小釵</a> </li>
33                 <li><a href="01.htm">宇智波斑</a> </li>
34                 <li><a href="01.htm">初代火影</a> </li>
35                 <li><a href="01.htm">六道仙人</a> </li>
36                 <li><a href="01.htm">史豔文</a> </li>
37                 <li><a href="01.htm">藏鏡人</a> </li>
38                 <li><a href="01.htm">黑白郎君南宮很</a> </li>
39             </ul>
40         </div>
41     </div>
42 </body>
43 </html>

http://sandbox.runjs.cn/show/f8oxhkfs

這個是界面上的搜索與數據庫沒關係。

內嵌列表

 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <title></title>
 5     <meta name="viewport" content="width=device-width, initial-scale=1">
 6     <link id="jquerymobile_120" rel="stylesheet" type="text/css" class="library" 
 7     href="/js/sandbox/jquery-mobile/jquery.mobile-1.2.0/jquery.mobile-1.2.0.css">
 8     <script id="jquery_182" type="text/javascript" class="library" 
 9     src="/js/sandbox/jquery/jquery-1.8.2.min.js"></script>
10     <script id="jquerymobile_120" type="text/javascript" class="library" 
11     src="/js/sandbox/jquery-mobile/jquery.mobile-1.2.0/jquery.mobile-1.2.0.min.js"></script>
12 </head>
13 <body>
14     <div data-role="page">
15         <header data-role="header">
16             <h1>
17                 列表分割</h1>
18         </header>
19         <div data-role="content">
20             <ul data-role="listview" data-theme="g" data-inset="true">
21                 <li><a href="01.htm">清香白蓮素還真<span class="ui-li-count">30</span></a> </li>
22                 <li><a href="01.htm">百世經綸一頁書<span class="ui-li-count">30</span></a> </li>
23                 <li><a href="01.htm">刀狂劍癡葉小釵<span class="ui-li-aside">本命</span></a> </li>
24             </ul>
25             <ol  data-role="listview" data-theme="g" data-inset="true">
26                 <li><a href="01.htm">宇智波斑</a> </li>
27                 <li><a href="01.htm">初代火影</a> </li>
28                 <li><a href="01.htm">六道仙人</a> </li>
29             </ol>
30             <ul data-role="listview" data-theme="g" data-inset="true">
31                 <li><a href="01.htm">史豔文</a> </li>
32                 <li><a href="01.htm">藏鏡人</a> </li>
33                 <li><a href="01.htm">黑白郎君南宮很</a> </li>
34             </ul>
35         </div>
36     </div>
37 </body>
38 </html>

http://sandbox.runjs.cn/show/lpjnjowv

列表的性能問題

jquery mobile雖然提供了非常豐富的列表類型,但大部分類型都是針對不同需求而實現的內容格式列表。

實際上,jquery mobile並沒有實現列表的分頁功能,當數據量非常大時需要有分頁功能,在前面說過,jquery mobile提供一種可搜索過濾列表類型的列表。

前面我們就說了沒有通過數據庫檢索,可能出現數據量非常大的情況,對性能,對流量都不好,檢索時候可能出現假死的情況。

所以使用list功能需要慎重。

好了,基本UI方面的我們就看完了,現在我們來看看事件方面的東西。

jquery mobile提供了豐富的事件處理機制,並且根據不同的移動設備,整合各種事件,使得開發者不必解決不同設備之間的事件處理差異。

頁面加載事件

我們在頁面中會使用

它的作用是當加載完成一個web頁面的Dom結構後就運行該方法。

在移動web應用程序時,仍然可以使用這個功能,但是jquery mobile的機制是每個視圖和頁面的內容都是使用ajax請求加載的,這樣每次顯示一個新視圖或者新頁面都沒辦法調用readey方法,這不是我們想要的結果。

所以針對jquery mobile提供了這個方法解決這個問題:pageCreate事件,該事件的含義是當視圖或頁面被切換時觸發的。

1 $('#page').live('pagecreate', function (e) {
2     alert('觸發之');
3 });

touch事件

jquery mobile提供了最基本的觸摸事件:touch事件

tap:
快速觸摸屏幕並離開,類似於一次完整的點擊事件
taphold:
觸摸屏幕並保持一段時間
swipe:
在1秒內水平移動30px屏幕像素以上時觸發
swipeleft:
向左側滑動
swiperight:
向右側滑動

方向改變事件

orientationchange事件函數當移動設備方向發生改變時觸發。

在事件回調函數內的第二個參數返回一個用於識別當前方向的參數,該參數只會返回兩種值:portrait(縱向)和landscape(橫向)

但是該事件不是所有瀏覽器都支持,所以使用要慎重。

滾動事件

目前jquery mobile支持兩種滾動事件

scrollstart
開始滾動時觸發,需要注意是ios上該事件不穩定,原因是ios在滾動時會禁止dom操作
會將dom操作放入隊列中,待滾動結束後才執行這些操作,但是估計現在解決了。
scrollend
在滾動結束時觸發

顯示/隱藏事件

在基於jquery mobile的移動web應用中,我們知道一個web頁面存在多個不同的視圖或頁面,但每次只會顯示一個。

當顯示其中一個視圖時其餘都會隱藏,每次視圖切換都會觸發顯示/隱藏事件

pagebeforeshow
當視圖通過動畫效果開始顯示在屏幕之前觸發事件
pagebeforehide
當視圖通過動畫效果開始隱藏之前觸發事件
pageshow
當視圖通過動畫效果顯示在屏幕之後觸發事件
pagehide
當視圖通過動畫效果隱藏後觸發事件

沒切換一次頁面,4鍾事件都會被觸發,例如:
當a視圖切換到b視圖時,首先觸發a視圖的pagebeforeshow事件和b視圖的pagebeforehide事件
當b視圖完成切換動畫效果後完整的顯示在屏幕中時,會觸發a視圖的pagehide事件和b視圖的pageshow事件

虛擬鼠標事件

jquery mobile提供了一種虛擬點擊事件來整合不同設備中mouse和touch事件

vmouseover
統一處理觸摸和鼠標懸停事件
vmousedown
統一處理觸摸和鼠標按下事件
vmousemove
處理觸摸和鼠標移動事件
vmouseup
處理觸摸和鼠標鬆開事件
vclick
處理觸摸和鼠標點擊事件
vmousecancel
處理觸摸和鼠標離開事件

我們隊jquery mobile的學習暫時到這裏,接下來我們在學習下phonegap,然後就實戰一下下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章