评论 ”[实例] 设计基于JQM的WebApp“
DEMO
先上最近做的一个WebApp小应用,http://iwxy.me/m.html,大家可以先去玩玩儿,在移动终端访问查看最佳效果
实现的功能是微博上偶然看到的一个小测试,动物认识真实的自己,不说测试的真实性如何,只是觉得挺有趣的,还给它取了个洋气的名字,叫 看见,自己
废话不多说,下面开始正题
WebApp
关于WebApp,很多人说好,也有很多人反对
它有很多优点,比如
- 全平台兼容,安卓,IOS,WindowsPhone 通用
- 免去了更新的麻烦,因为它根本就无需安装
- 无需提交到应用商店,方便、快捷地部署
缺点也非常明显
- 硬件要有足够的处理能力去支持图形和动画效果
- 网速限制,脱离了网络就无法运行
- 相对 NativeApp 体验较差,如果要调用相机或者文件系统也不是一件容易的事
我认为这是一个技术发展的过程,未来会变成啥样儿谁也说不清对吧
jQuery Mobile
jQuery Mobile 是一款创建移动 WebApp 的框架,同类型的框架也有很多,就不一一列举了
官网链接 http://jquerymobile.com/ ,当前最新版本是 version 1.4.5
官网下载下来的压缩包中包括了构建项目很多不必要的文件,包括很多 demo 和 images
需要的是 jquery.mobile-1.4.5.min.css 、jquery.mobile-1.4.5.min.js 和一张 ajax-loader.gif 作为加载时的图片
还有,别忘记了jQuery,支持版本 jQuery 1.8 - 1.11 / 2.1文件加载好了,接下来就可以开始构建项目了,在JQM中,使用 HTML5 data-* 属性为移动设备创建对触控友好的交互外观,
在 jQuery Mobile 中,可以在单一 HTML 文件中创建多个页面,通过唯一的 id 来分隔每张页面,并使用 href 属性来连接彼此
<div data-role="page" id="pageone"> <div data-role="content"> <a href="#pagetwo">转到页面二</a> </div> </div> <div data-role="page" id="pagetwo"> <div data-role="content"> <a href="#pageone">转到页面一</a> </div> </div>
看见,自己 全部的代码也是写在同一个文件中,但是如果要构建大型项目的话,不推荐采取这种方式,会严重影响加载时间
data-role="page"
显示在浏览器中的页面
data-role="header"
创建页面上方的工具栏(常用于标题和搜索按钮)
data-role="content"
定义页面的内容,比如文本、图像、表单和按钮,等等
data-role="footer"
创建页面底部的工具栏除了查官方文档外,W3School的教程也很详细,不过你需要将代码部署到本地来查看效果
jQuery Mobile 主题
默认有两种主题供选择,也可以自己 DIY 定制主题,http://themeroller.jquerymobile.com/
在原有的样式上进行修改并不是一件容易的事,如果认为可以给元素加一个 class 然后写样式,会发现自己写的样式将会被覆盖,因为这里的样式为动态添加
定制主题建议的方法是
- 通过themeroller,简单方便
- 找到jquery.mobile.css文件,通过复制主题a和替换每个类名称–a的后缀名定制自己的主题
看见,自己
原于微博上看到的一则小测试
head
<!DOCTYPE html> <html> <head> <title>看见,自己</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no"/> <meta name="apple-mobile-web-app-capable" content="yes" /> <meta name="format-detection" content="telephone=no" /> <link rel="stylesheet" href="jquery.mobile-1.4.5.min.css" /> <link rel="apple-touch-icon" href="/icon.png" /> <script src="/jquery.min.js"></script> <script src="/jquery.mobile-1.4.5.min.js"></script> </head>
视窗大小等于设备大小,初始大小为1,不允许用户缩放
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no"/>
网站开启对 web app 程序的支持
<meta name="apple-mobile-web-app-capable" content="yes" />
忽略页面中的数字识别为电话号码
<meta name="format-detection" content="telephone=no" />
设置主屏幕图标,Safari的添加到主屏幕功能不仅方便用户快速访问,而且也使 WebApp 更像一个 NativeApp
<link rel="apple-touch-icon" href="/icon.png" />
随便画了一个非常简单的 icon
在设备上查看图标
除了这些标签,我们还需要添加一些属性来让 WebApp 看上去更像一个 NativeApp
CSS
<style type="text/css"> *{ -webkit-touch-callout:none; //禁止弹出列表栏 -webkit-user-select:none; //禁止用户选中元素 } </style>
HTML
<body> <div data-role="page" id="index"> <div data-role="header" data-theme=‘b‘ data-position="fixed"> <h1>看见,自己</h1> </div> <div data-role="content"> <h4>这是一个非常有趣(wu liao)的小测试,<br>为什么这么说呢?因为真的很有趣(wu liao)...</h4> <p>乐活心理测试</p><hr> <p href="#">动物认知真实的你</p><hr> <center class="ready">Are you ready ?</center> <center class="ready">请点击下方按钮开始测试</center> <center class="ready">(^∀^)</center> </div> <div data-role="footer" data-position="fixed"> <div data-role="navbar"> <ul > <li><a href="#test" data-transition="flip">START NOW</a></li> </ul> </div> </div> </div> <div data-role="page" id="test"> <div data-role="header" data-position="fixed" data-theme="b"> <h1>看见,自己</h1> </div> <div data-role="content"> <center>请<span class="number">依序</span>选出你心目中最喜欢的三种动物<br><br>必须是你的第一直觉<br></center> <div id="animal" data-role="controlgroup" data-type="vertical" data-mini="true"> <a data-role="button">狗</a> <a data-role="button">猴子</a> <a data-role="button">猫</a> <a data-role="button">狮子</a> <a data-role="button">马</a> <a data-role="button">松鼠</a> <a data-role="button">羊</a> <a data-role="button">兔子</a> <a data-role="button">熊</a> <a data-role="button">企鹅</a> </div> </div> <div data-role="footer" data-position="fixed"> <div data-role="navbar"> <ul id="choose"> <li><a id="choose_first">1</a></li> <li><a id="choose_second">2</a></li> <li><a id="choose_third">3</a></li> </ul> </div> </div> </div> <div data-role="page" id="result"> <div data-role="header" data-position="fixed" data-theme="b"> <h1>看见,自己</h1> </div> <div data-role="content"> <h4>最喜欢的动物 - 代表你希望自己给别人的印象</h4><hr> <p id="mostLike"></p> <h4>排名第二的动物 - 代表别人对你的看法</h4><hr> <p id="secondLike"></p> <h4>排名第三的动物 - 代表你真正的样子</h4><hr> <p id="thirdLike"></p> </div> <div data-role="footer" data-position="fixed"> <div data-role="navbar"> <ul> <li><a