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 id="testAgain">重新测试</a></li> </ul> </div> </div> </div> </body>
JS
<script type="text/javascript"> $(document).ready(function(){ var n = 1; $("#animal a").click(function(){ if(n == 1){ var t1 = $(this).text(); $("#choose_first").text(t1).css({"color":"white","background":"#16a085"}); $("#mostLike").append(showResult(t1)); n++; } else if(n == 2){ var t2 = $(this).text(); $("#choose_second").text(t2).css({"color":"white","background":"#16a085"}); $("#secondLike").append(showResult(t2)); n++; } else if(n == 3){ var t3 = $(this).text(); $("#choose_third").text(t3).css({"color":"white","background":"#16a085"}); $("#thirdLike").append(showResult(t3)); n=0; setTimeout("location.href=‘#result‘",500); } }) function showResult(a){ var i = 0; var animal = [ {"no":1,"name":"狗","mean":"个性温和,善解人意,为朋友竭心尽力,不怕麻烦,是忠诚度极高且富有同情心的人,为人正直,不会做出背叛朋友的事,是可以信赖的人"}, {"no":2,"name":"猴子","mean":"幽默、容易亲近,在一起不会让人感到厌倦,喜欢照顾别人,头脑灵活,好奇心强"}, {"no":3,"name":"猫","mean":"神秘、捉摸不定的人,忠于自己的步调,崇尚自由,不喜欢受束缚,而且非常自我,对很多事都保持着既定的想法"}, {"no":4,"name":"狮子","mean":"有威严,在人群中特别受瞩目,最具有领袖气质的人,重荣誉及社会地位,有时难免偏于虚荣,因此,自尊心也很强"}, {"no":5,"name":"马","mean":"带点稚气,为人爽快,即使是女性也不会要求特别的待遇,是个个性活泼、干脆,在穿着上也很讲究的人"}, {"no":6,"name":"松鼠","mean":"有一点孩子气,外表给人软弱的印象,实际上却是个能干且牢靠的人,不过有些三心两意,另外崇尚自由,脑筋也很灵活"}, {"no":7,"name":"羊","mean":"外表柔弱,实际上却很顽固,是个勤奋不懈的努力派,以及重秩序、讲义气的人,朋友的事看得比自己还重要"}, {"no":8,"name":"兔子","mean":"是个可爱,颇具美丽的人,由于这个特质,常让周遭的人兴起想保护你的欲望,另外个性温和优雅,很讨人喜爱"}, {"no":9,"name":"熊","mean":"温和亲切,是可以依赖的人,心地善良,个性单纯、率直,做事谨慎,给人平稳、宜家的印象"}, {"no":10,"name":"企鹅","mean":"谨慎、保守、朴素型的人,有时会给人一种沉静中带点危险的感觉,对很多事都无动于衷"} ] for(;i <= 10;i++){ if(a == animal[i].name){ return animal[i].name+" :"+animal[i].mean; } } } $("#testAgain").click(function(){ //页面跳转 location.replace("#index"); location.reload(); //刷新脚本 }) }) </script>
WebApp 开发的流程差不多就是这样子了,Demo 很简单
JQM 文档很全,提供了很多友好的组件,总体来说非常容易上手,推荐给想学 WebApp 的同学进一步了解和学习
评论:
在我看来,你做的这么好,完全可以使用Romanysoft LAB的服务,搭建苹果桌面App。 (*^__^*) 嘻嘻