文章目录
5. 列表控件的使用
JQuery Mobile使用方便而且具有出色的交互性,本章主要知识点包括:
- 列表的使用方法,包括最基础的列表及列表内容的排列技巧。
- 列表的高级用法,包括在列表中插入图片及额外的按钮。
- 使用列表规划界面布局。
5.1 简单的新闻列表
用列表控件实现简单的新闻列表:
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Fixed Positioning Example</title>
<meta name="viewport" content="width=device-width, initial-scale=0.5"/>
<link rel="stylesheet" href="../css/jquery.mobile-1.4.5.min.css" />
<script src="../script/jquery-2.1.4.min.js"></script>
<script src="../script/jquery.mobile-1.4.5.min.js"></script>
</head>
<body>
<div data-role="page">
<div data-role="header" data-position="fixed" data-fullscreen="true">
<a href="#">返回</a>
<h1>今日新闻</h1>
<a href="#">设置</a>
</div>
<div data-role="content">
<ul data-role="listview">
<li><a href="#">中美海军举行联合反海盗演习 首次演练实弹射击</a></li>
<li><a href="#">安徽回应警察目睹少女被杀:不护短已提请检方介入</a></li>
<li><a href="#">深圳居民为省钱开船到香港加油被判拘役5个月</a></li>
<li><a href="#">海南卫生厅干部体验看病难:候2小时就诊5分钟</a></li>
<li><a href="#">延安市长回应削山建新城:保证不变“鬼城”</a></li>
<li><a href="#">上海今日遭高温暴雨雷电大风轮番袭击(组图)</a></li>
<li><a href="#">美国安局人员被曝曾用监控资源监听自己伴侣</a></li>
<li><a href="#">金正恩视察朝鲜最新战舰 赞军舰科技含量高(图)</a></li>
<li><a href="#">美“51区”雇员称内有9架飞碟 曾见灰色外星人 </a></li>
<li><a href="#">巴基斯坦释放337名印度在押人员</a></li>
<li><a href="#">海南卫生厅干部体验看病难:候2小时就诊5分钟</a></li>
<li><a href="#">延安市长回应削山建新城:保证不变“鬼城”</a></li>
<li><a href="#">上海今日遭高温暴雨雷电大风轮番袭击(组图)</a></li>
<li><a href="#">美国安局人员被曝曾用监控资源监听自己伴侣</a></li>
<li><a href="#">金正恩视察朝鲜最新战舰 赞军舰科技含量高(图)</a></li>
<li><a href="#">美“51区”雇员称内有9架飞碟 曾见灰色外星人 </a></li>
<li><a href="#">巴基斯坦释放337名印度在押人员</a></li>
</ul>
</div>
<div data-role="footer" data-position="fixed" data-fullscreen="true">
<div data-role="navbar">
<ul>
<li><a id="chat" href="#" data-icon="plus">今日新闻</a></li>
<li><a id="email" href="#" data-icon="plus">国内新闻</a></li>
<li><a id="skull" href="#" data-icon="plus">国际新闻</a></li>
<li><a id="beer" href="#" data-icon="plus">设置</a></li>
</ul>
</div>
</div>
</div>
</body>
</html>
效果如下:
使用标签时,首先在页面中加入一个标签< ul data-role=“listview” >,之后在其中加入任意数量的< li >标签,其中的内容会以一种类似按钮的形式显示出来。
5.2 音乐专辑列表的显示
带有图片的音乐专辑列表:
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Fixed Positioning Example</title>
<meta name="viewport" content="width=device-width, initial-scale=0.5"/>
<link rel="stylesheet" href="../css/jquery.mobile-1.4.5.min.css" />
<script src="../script/jquery-2.1.4.min.js"></script>
<script src="../script/jquery.mobile-1.4.5.min.js"></script>
</head>
<body>
<div data-role="page" data-theme="a">
<div data-role="header" data-position="fixed" data-fullscreen="true">
<a href="#">返回</a>
<h1>播放列表</h1>
<a href="#">设置</a>
</div>
<ul data-role="listview">
<li><a href="#">
<img src="images/1.jpg">
<h2>no air</h2>
<p> Chris Brown</p></a>
</li>
<li><a href="#">
<img src="images/2.jpg">
<h2>baby</h2>
<p>justinbieber</p></a>
</li>
<li><a href="#">
<img src="images/3.jpg">
<h2>黑色星期五</h2>
<p>莎拉布莱曼</p></a>
</li>
<li><a href="#">
<img src="images/4.jpg">
<h2>好想大声说爱你</h2>
<p>灌篮高手</p></a>
</li>
<li><a href="#">
<img src="images/5.jpg">
<h2>brave song</h2>
<p>多田葵</p></a>
</li>
<li><a href="#">
<img src="images/1.jpg">
<h2>no air</h2>
<p> Chris Brown</p></a>
</li>
<li><a href="#">
<img src="images/2.jpg">
<h2>baby</h2>
<p>justinbieber</p></a>
</li>
<li><a href="#">
<img src="images/3.jpg">
<h2>黑色星期五</h2>
<p>莎拉布莱曼</p></a>
</li>
<li><a href="#">
<img src="images/4.jpg">
<h2>好想大声说爱你</h2>
<p>灌篮高手</p></a>
</li>
<li><a href="#">
<img src="images/5.jpg">
<h2>brave song</h2>
<p>多田葵</p></a>
</li>
<li><a href="#">
<img src="images/1.jpg">
<h2>no air</h2>
<p> Chris Brown</p></a>
</li>
<li><a href="#">
<img src="images/2.jpg">
<h2>baby</h2>
<p>justinbieber</p></a>
</li>
<li><a href="#">
<img src="images/3.jpg">
<h2>黑色星期五</h2>
<p>莎拉布莱曼</p></a>
</li>
<li><a href="#">
<img src="images/4.jpg">
<h2>好想大声说爱你</h2>
<p>灌篮高手</p></a>
</li>
<li><a href="#">
<img src="images/5.jpg">
<h2>brave song</h2>
<p>多田葵</p></a>
</li>
</ul>
</div>
</body>
</html>
效果如下:
在JQuery Mobile的列表控件中,默认如果在< li >标签中的第一个位置插入图片,将会把图片放大或缩小到80×80像素的大小,并在列表左侧显示。也就是说,把专辑图片放在右边是不容易做到的。
tips:
- JQuery Mobile中保留了大量HTML中自带的属性,这些属性往往会带来意外之喜。
- 虽然理论上JQuery Mobile的列表控件可以无限加入项目,但是开发者在实际设计中要充分考虑移动设备的性能极限,尤其是有大量图片需要加载时,极容易出现卡顿现象。
5.3 更完善的音乐专辑列表
上节分享了一个制作音乐播放器列表的例子,在实际开发中往往需要更加复杂的播放列表。比如,当前显示的是网络音乐列表,在列表右侧有一个按钮,通过这个按钮可以将资源添加到本地播放列表中进行保存。
改进后的音乐专辑列表:
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Fixed Positioning Example</title>
<meta name="viewport" content="width=device-width, initial-scale=0.5"/>
<link rel="stylesheet" href="../css/jquery.mobile-1.4.5.min.css" />
<script src="../script/jquery-2.1.4.min.js"></script>
<script src="../script/jquery.mobile-1.4.5.min.js"></script>
</head>
<body>
<div data-role="page" data-theme="a">
<div data-role="header" data-position="fixed" data-fullscreen="true">
<a href="#">返回</a>
<h1>播放列表</h1>
<a href="#">设置</a>
</div>
<div data-role="popup" id="purchase" data-theme="d" data-overlay-theme="b" class="ui-content" style="max-width:340px;">
<h3>是否加入播放列表?</h3>
<a href="#" data-role="button" data-rel="back" data-theme="b" data-icon="check" data-inline="true" data-mini="true">加入播放列表</a>
<a href="#" data-role="button" data-rel="back" data-inline="true" data-mini="true">算了吧</a>
</div>
<ul data-role="listview">
<li><a href="#">
<img src="images/1.jpg">
<h2>no air</h2>
<p> Chris Brown</p></a>
<a href="#purchase" data-rel="popup" data-position-to="window" data-transition="pop"></a>
</li>
<li><a href="#">
<img src="images/2.jpg">
<h2>baby</h2>
<p>justinbieber</p></a>
<a href="#purchase" data-rel="popup" data-position-to="window" data-transition="pop"></a>
</li>
<li><a href="#">
<img src="images/3.jpg">
<h2>黑色星期五</h2>
<p>莎拉布莱曼</p></a>
<a href="#purchase" data-rel="popup" data-position-to="window" data-transition="pop"></a>
</li>
<li><a href="#">
<img src="images/4.jpg">
<h2>好想大声说爱你</h2>
<p>灌篮高手</p></a>
<a href="#purchase" data-rel="popup" data-position-to="window" data-transition="pop"></a>
</li>
<li><a href="#">
<img src="images/5.jpg">
<h2>brave song</h2>
<p>多田葵</p></a>
<a href="#purchase" data-rel="popup" data-position-to="window" data-transition="pop"></a>
</li>
</ul>
</div>
</body>
</html>
效果如下:
实际上是在列表中再加入一个链接。由于本例中没有引入链接的图标,因此显示的是一个空洞的圆圈。
5.4 显示销售的商品列表
在制作有关电子商务的应用时,除了商品的价格和名称外,还需要显示一些其他数据(如销售量或点击量),而这样的数据可以利用列表控件的气泡功能实现。
利用消息气泡制作能显示销售量的商品列表:
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>消息气泡的使用</title>
<meta name="viewport" content="width=device-width, initial-scale=0.5"/>
<link rel="stylesheet" href="../css/jquery.mobile-1.4.5.min.css" />
<script src="../script/jquery-2.1.4.min.js"></script>
<script src="../script/jquery.mobile-1.4.5.min.js"></script>
</head>
<body>
<!--设置了新的页面-->
<div data-role="page">
<div data-role="header" data-position="fixed" data-fullscreen="true">
<a href="#">返回</a>
<h1>商品列表</h1>
<a href="#">设置</a>
</div>
<!---不使用内容栏直接在页面中加入列表-->
<ul data-role="listview" data-inset="true">
<li><a href="#"> <!--每一个li标签标示列表中额一项-->
<h2>联想Y400</h2> <!--用来显示电脑的型号-->
<p>价格:5199</p> <!--这个是价格-->
<span class="ui-li-count">820</span> <!--本节的重点,以气泡的形式给出信息-->
</a></li> <!--结束-->
<li><a href="#">
<h2>ThinkPad E430</h2>
<p>价格:3749</p>
<span class="ui-li-count">45</span>
</a></li>
<li><a href="#">
<h2>神舟K590</h2>
<p>价格:4599</p>
<span class="ui-li-count">123</span>
</a></li>
<li><a href="#">
<h2>清华同方U410</h2>
<p>价格:4099</p>
<span class="ui-li-count">444</span>
</a></li>
<li><a href="#">
<h2>戴尔14V inspiron</h2>
<p>价格:3099</p>
<span class="ui-li-count">674</span>
</a></li>
<li><a href="#">
<h2>iMac</h2>
<p>价格:15999</p>
<span class="ui-li-count">99</span>
</a></li>
</ul>
</div>
</body>
</html>
效果如下:
每个列表右侧多了一个像气泡一样的图标,里面分别显示一条数据,这与< span class=“ui-li-count” >45< /span >有关,这就是列表中消息气泡的使用方法。
除商品信息外,消息气泡同样适用于其他类型的应用,比如在新闻类应用中用来显示评论的数量,在聊天类软件中显示接受的信息等。
5.5 图书销量排名
制作带有编号的列表:
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Fixed Positioning Example</title>
<meta name="viewport" content="width=device-width, initial-scale=0.5"/>
<link rel="stylesheet" href="../css/jquery.mobile-1.4.5.min.css" />
<script src="../script/jquery-2.1.4.min.js"></script>
<script src="../script/jquery.mobile-1.4.5.min.js"></script>
</head>
<body>
<div data-role="page">
<div data-role="header" data-position="fixed" data-fullscreen="true">
<a href="#">返回</a>
<h1>本月图书销售排名</h1>
<a href="#">设置</a>
</div>
<ol data-role="listview">
<li><h2>我是个大师</h2></li>
<li><h2>致我们终将逝去的青春</h2></li>
<li><h2>饥饿游戏</h2></li>
<li><h2>我是个算命先生</h2></li>
<li><h2>谁主沉浮</h2></li>
<li><h2>剩下的方程式</h2></li>
<li><h2>世界经典推理故事大全集</h2></li>
<li><h2>三体全集</h2></li>
<li><h2>天坑猎鹰</h2></li>
<li><h2>心理罪之城市之光</h2></li>
</ol>
</div>
</body>
</html>
效果如下:
与HTML一样,在JQuery Mobile中也可以使用< ul >标签作为有序列表来使用。在HTML中,< ul >与< ol >都能够起到列表的作用,但是它们又有些不同。< ol >表示的是有序列表,即会显示出列表中每一项的序号,而< ul >作为无序列表则不会显示序号。JQuery Mobile显然也继承了HTML的这一规定。
虽然带有编号的列表使用非常方便,但是却有很大的局限性。比如,当需要在列表中插入图片或在列表中显示两行文字时,左侧的编号并不能居中显示而依然留在偏上的位置,影响页面的效果。
5.6 简单的电话通讯录
有序列表能够有效对列表中的内容进行排列和查找,除了通过编号之外,还可以通过对列表进行分组来实现信息的分类以提高查找效率,其中一个经典的例子就是手机的通讯录。
具有分组功能的列表:
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Fixed Positioning Example</title>
<meta name="viewport" content="width=device-width, initial-scale=0.5"/>
<link rel="stylesheet" href="../css/jquery.mobile-1.4.5.min.css" />
<script src="../script/jquery-2.1.4.min.js"></script>
<script src="../script/jquery.mobile-1.4.5.min.js"></script>
</head>
<body>
<div data-role="page">
<!--使用ul标签声明一个列表-->
<ul data-role="listview" data-inset="true">
<!--使用属性data-role="list-divider"作为分隔栏使用-->
<li data-role="list-divider">家人</li>
<!--这个才是真正的列表项-->
<li><a href="#">
<h3>爸爸</h3> <!--列表中的内容-->
<p>13334333564</p> <!--使用p标签实现换行-->
</a></li>
<!--此处省略部分内容,读者可自行添加-->
<li data-role="list-divider">陌生人</li>
<li><a href="#">
<h3>10086</h3>
<p>10086</p>
</a></li>
<li><a href="#">
<h3>骗子1</h3>
<p>13334333564</p>
</a></li>
<li><a href="#">
<h3>骗子2</h3>
<p>13334333564</p>
</a></li>
</ul>
</div>
</body>
</html>
效果如下:
对列表分组的方式非常简单,只需要在列表的某一项中加入属性data-role=“list-divider”,该项就会成为列表中组与组之间的分隔符,以不同的样式显示出来。
注:如果在分隔符中加入链接,将不会被处理为按钮的样式而仅给其中的文字加入链接。
5.7 让查找更加便捷
上一节介绍了一种对号码进行分类的方法,其实还可以根据号码本身的数字进行分类。比如在QQ界面偏上的位置有一个文本编辑框,在里面输入数字或其他文字,QQ会自动在好友列表中找出能与之匹配的好友。
事实上,在手机的通讯录中也常常会用到类似的功能,比如在拨打电话的界面输入几个数字,手机会自动在号码本中找到符合条件的号码,并以列表的形式显示出来,这样的功能都可以通过列表控件实现。
便于查找的号码本:
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Fixed Positioning Example</title>
<meta name="viewport" content="width=device-width, initial-scale=0.5"/>
<link rel="stylesheet" href="../css/jquery.mobile-1.4.5.min.css" />
<script src="../script/jquery-2.1.4.min.js"></script>
<script src="../script/jquery.mobile-1.4.5.min.js"></script>
</head>
<body>
<div data-role="page">
<ul data-role="listview" data-autodividers="true" data-filter="true" data-inset="true">
<li><a href="index.html">陈二狗</a></li>
<li><a href="index.html">陈三狗</a></li>
<li><a href="index.html">陈四狗</a></li>
<li><a href="index.html">孙悟空</a></li>
<li><a href="index.html">孙二娘</a></li>
<li><a href="index.html">张三丰</a></li>
<li><a href="index.html">张无忌</a></li>
<li><a href="index.html">张飞</a></li>
<li><a href="index.html">刘备</a></li>
<li><a href="index.html">刘秀</a></li>
<li><a href="index.html">刘邦</a></li>
<li><a href="index.html">鲁班一世</a></li>
<li><a href="index.html">鲁班二世</a></li>
<li><a href="index.html">鲁班三世</a></li>
<li><a href="index.html">刘瑾</a></li>
<li><a href="index.html">10086</a></li>
</ul>
</div>
</body>
</html>
效果如下:
由于在列表中设置了属性data-autodividers=“true”,因此列表中的内容会根据首字母或第一个汉字自动分组。另外由于设置了属性data-filter=“true”,因此在列表上方会显示一个针对列表内容的搜索框。
5.8 比较高级的新闻列表
比较高级的新闻列表:
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Fixed Positioning Example</title>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<link rel="stylesheet" href="../css/jquery.mobile-1.4.5.min.css" />
<script src="../script/jquery-2.1.4.min.js"></script>
<script src="../script/jquery.mobile-1.4.5.min.js"></script>
</head>
<body>
<div data-role="page">
<div data-role="header" data-position="fixed" data-fullscreen="true">
<a href="#">返回</a>
<h1>今日新闻</h1>
<a href="#">设置</a>
</div>
<ul data-role="listview" style="margin-top:45px;">
<li data-role="list-divider">8月27日 星期二<span class="ui-li-count">4</span></li>
<li><a href="#">
<img src="http://img5.pcpop.com/AppImg/160x160/2012/03/25/5115094241333943948193.jpg" />
<h2>jQuery Mobile实战发布</h2>
<p>新版《jQuery Mobile实战》第八章即将完稿,敬请各位读者期待。届时笔者也将开始第九章的写作。</p>
<p class="ui-li-aside"><strong>6:24</strong>PM</p>
</a></li>
<li><a href="#">
<img src="http://img5.pcpop.com/AppImg/160x160/2012/03/25/5115094241333943948193.jpg" />
<h2>jQuery Mobile实战发布</h2>
<p>新版《jQuery Mobile实战》第八章即将完稿,敬请各位读者期待。届时笔者也将开始第九章的写作。</p>
<p class="ui-li-aside"><strong>6:24</strong>PM</p>
</a></li>
<li><a href="#">
<img src="http://img5.pcpop.com/AppImg/160x160/2012/03/25/5115094241333943948193.jpg" />
<h2>jQuery Mobile实战发布</h2>
<p>新版《jQuery Mobile实战》第八章即将完稿,敬请各位读者期待。届时笔者也将开始第九章的写作。</p>
<p class="ui-li-aside"><strong>6:24</strong>PM</p>
</a></li>
<li><a href="#">
<img src="http://img5.pcpop.com/AppImg/160x160/2012/03/25/5115094241333943948193.jpg" />
<h2>jQuery Mobile实战发布</h2>
<p>新版《jQuery Mobile实战》第八章即将完稿,敬请各位读者期待。届时笔者也将开始第九章的写作。</p>
<p class="ui-li-aside"><strong>6:24</strong>PM</p>
</a></li>
<li data-role="list-divider">8月26日 星期一<span class="ui-li-count">3</span></li>
<li><a href="#">
<img src="http://img5.pcpop.com/AppImg/160x160/2012/03/25/5115094241333943948193.jpg" />
<h2>jQuery Mobile实战发布</h2>
<p>新版《jQuery Mobile实战》第八章即将完稿,敬请各位读者期待。届时笔者也将开始第九章的写作。</p>
<p class="ui-li-aside"><strong>6:24</strong>PM</p>
</a></li>
<li><a href="#">
<img src="http://img5.pcpop.com/AppImg/160x160/2012/03/25/5115094241333943948193.jpg" />
<h2>jQuery Mobile实战发布</h2>
<p>新版《jQuery Mobile实战》第八章即将完稿,敬请各位读者期待。届时笔者也将开始第九章的写作。</p>
<p class="ui-li-aside"><strong>6:24</strong>PM</p>
</a></li>
<li><a href="#">
<img src="http://img5.pcpop.com/AppImg/160x160/2012/03/25/5115094241333943948193.jpg" />
<h2>jQuery Mobile实战发布</h2>
<p>新版《jQuery Mobile实战》第八章即将完稿,敬请各位读者期待。届时笔者也将开始第九章的写作。</p>
<p class="ui-li-aside"><strong>6:24</strong>PM</p>
</a></li>
</ul>
<div data-role="footer" data-position="fixed" data-fullscreen="true">
<div data-role="navbar">
<ul>
<li><a id="chat" href="#" data-icon="custom">今日新闻</a></li>
<li><a id="email" href="#" data-icon="custom">国内新闻</a></li>
<li><a id="skull" href="#" data-icon="custom">国际新闻</a></li>
<li><a id="beer" href="#" data-icon="custom">设置</a></li>
</ul>
</div>
</div>
</div>
</body>
</html>
效果如下: