用jQuery Mobile创建Web App

移动互联网的发展,促生了各种各样的移动Web框架。jQuery是继Prototype之后又一个优秀的JavaScript框架。通过jQuery,我们能够快速地处理HTML文档、控制事件、给页面添加动画和Ajax效果。在Web设计中,我们通常会将设计转化成代码。但是这个过程通常是漫长而又反复,更悲剧的是,代码的可用性还要打个问号。而通过jQuery插件,我们只需在短短的几分钟内就能解决以往需要几小时甚至是几天的问题。

在本文中,Jake Rocheleau将为我们展示如何用jQuery来创建一个基于移动设备的Web App。在开发过程中,我们将使用CSS3的媒体查询功能来找出当前移动设备屏幕的的最大分辨率,根据不同的分辨率使用不同CSS。此外,Media Queries还可以帮助我们在小屏幕上隐藏导航菜单以展示更多的内容。我们还会使用jQuery来帮助我们使用Ajax.Load(),以便激活菜单栏和加载外部页面内容。

1. 定义页面布局

首先,我们先要查看HTML页面,并且使用CSS样式来确定页面的样式。在开头我会跳过许多不常见的Meta标签(对所创建的Web App没有直接的影响)。但是我们仍然要注意一些代码片段(在下面我已经列举出来)。

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">

<meta name="apple-mobile-web-app-capable" content="yes">

<meta name="apple-mobile-web-app-status-bar-style" content="black">

X-UA-Compatible是用来描述文件在某些浏览器上的渲染程度。不得不说, 在HTML5编程过程中这是一个非常有趣的事情。所以我不用太担心这个问题。但重要的是,如果我们恰当地使用Meta标签,它会给我们许多意想不到的帮助。例如加入关键字会被大型搜索网站自动搜集,可以设定页面格式及刷新和让网页自动适应移动浏览器大小等。

内容主体

在BODY中,我通过ID#w创建了一个Wrapper Div。在其中我将页面布局分成了#pagebody和#navmenu两个部分。整个页面的宽度为640px,所以#pagebody和#navmenu的宽度可以精确地计算。

我给导航菜单赋了一个较低的z-index值来保证#pagebody总能在最顶部面显示。

<div id="pagebody">

<header id="toolbarnav">

<a rel="external" href="#navmenu" id="menu-btn"></a>

<h1>HK Mobile</h1>

</header>

<section id="content" class="clearfix">

<h2>Welcome to the Mobile Site!</h2>

</section>

</div>

<div id="navmenu">

<header>

<h1>Menu Links</h1>

</header>

<ul>

<li><a rel="external" href="#homepage.html" class="navlink">Home</a></li>

<li><a rel="external" href="#about.html" class="navlink">About Us</a></li>

<li><a rel="external" href="#advertise.html" class="navlink">Advertise</a></li>

<li><a rel="external" href="#write.html" class="navlink">Write for Us</a></li>

<li><a rel="external" href="#contacts.html" class="navlink">Contacts</a></li>

<li><a rel="external" href="#privacy.html" class="navlink">Privacy Policy</a></li>

</ul>

</div>

我在每个.html页面前都添加了井字符(#)。每当点击一个链接时,URL栏都会出现和下推主体内容。当引用的ID没有被重载时,我们只能通过JavaScript来重新调用它。

2. CSS定位

我们CSS代码中并没有太多复杂的内容。大多数的定位工作都是通过手动完成的,完成之后才会交由jQuery来操作。同样,这里也有一些我们要注意的代码片段。

/** @group core body **/

#w #pagebody {

position: relative;

left: 0;

max-width: 640px;

min-width: 320px;

z-index: 99999;

}

#w #navmenu {

background: #475566;

height: 100%;

display: block;

position: fixed;

width: 300px;

left: 0px;

top: 0px;

z-index: 0;

}

上面的这段代码分别定义了页面中两个部分的样式。导航菜单的宽度为300px,这样一来,就为我们浏览页面内容留下了一点空间,打开和关闭菜单按钮也固定在左侧。这里最重要的部分就是导航菜单的z-index的属性值和位置(z-index: 0;position: fixed)。

我们顶部栏标题也是一个有趣的部分。它被放置在一个固定的位置,会随着页面内容的滚动而滚动,大多数的iOS App上都有这个效果。

/** @group header **/

#w #pagebody header#toolbarnav {

display: block;

position: fixed;

left: 0px;

top: 0px;

z-index: 9999;

background: #0b1851 url(‘img/tabbar-solid-bg.png‘) top left no-repeat;

border-radius: 5px;

-moz-border-radius: 5px;

-webkit-border-radius: 5px;

-o-border-radius: 5px;

border-bottom-right-radius: 0;

-moz-border-radius-bottomright: 0;

-webkit-border-bottom-right-radius: 0;

border-bottom-left-radius: 0;

-moz-border-radius-bottomleft: 0;

-webkit-border-bottom-left-radius: 0;

height: 44px;

width: 100%;

max-width: 640px;

}

#w #pagebody header#toolbarnav h1 {

text-align: center;

padding-top: 10px;

padding-right: 40px;

color: #e6e8f2;

font-weight: bold;

font-size: 2.1em;

text-shadow: 1px 1px 0px #313131;

}

移动规则

很容易注意到,在背景上我使用了蓝色的横条作为标题栏。这个标题栏的大小为640x44px,从而能够与页面的布局保持吻合。不仅如此,我还为iPhone/iPad视网膜显示屏设计了一张@2x图片。大家可以从上图看到这些图片,或者从SOURCE CODE中获取。

{System}/demo/img/[email protected]

{System}/demo/img/[email protected]

/** retina display **/

@media only screen and (-webkit-min-device-pixel-ratio: 2),

only screen and (min--moz-device-pixel-ratio: 1.5),

only screen and (min-device-pixel-ratio: 1.5) {

#w #pagebody header {

background: #0b1851 url(‘img/[email protected]‘) top left no-repeat;

background-size: 640px 44px;

}

#w #pagebody header #menu-btn {

background: url(‘img/[email protected]‘) no-repeat;

background-size: 53px 30px;

}

}

菜单箭头的设计

在导航菜单方面,我为每个菜单链接的右侧设计了一个指向右方的箭头图标。相信大多数CSS3的爱好者都会喜欢这么做,这确实是一个不错的创意。

我使用transform变量在导航内容后面创建一个小边框,所以我们可以在左边的框架内任意的移动,除此之外,在悬停状态下我们可以很方便地改变边框的颜色和样式。更令人惊叹的是,你只需要使用基本的HTML5和CSS3样式就可以完成这些边框地设计。

但首先,我们要进入JavaScript编码世界。

#w #navmenu ul li a::after {

content: ‘‘;

display: block;

width: 6px;

height: 6px;

border-right: 3px solid #d0d0d8;

border-top: 3px solid #d0d0d8;

position: absolute;

right: 30px;

top: 45%;

-webkit-transform: rotate(45deg);

-moz-transform: rotate(45deg);

-o-transform: rotate(45deg);

transform: rotate(45deg);

}

#w #navmenu ul li a:hover::after { border-color: #cad0e6; }

3.  jQuery动画设计

在编写这些自定义代码过程中,我新建了一个script.js文件。大家可以根据自己的需要来直接编写<script> 标签,也可以从SOURCR CODE中直接下载我的模板。

$(document).ready(function(){

var pagebody = $("#pagebody");

var themenu = $("#navmenu");

var topbar  = $("#toolbarnav");

var content = $("#content");

var viewport = {

width : $(window).width(),

height : $(window).height()

};

// retrieve variables as

// viewport.width / viewport.height

在开始之前,我设置一些页面变量,如此一来,我们就可以更为方便地引用文档中的变量。我从没用过视口值,但是如果你想调整动画阶段,设置视口值可以帮你一个大忙。例如:通过视口值,你可以检查当前浏览器的宽度,并能够的对你的菜单栏进行相应地缩放。

function openme() {

$(function () {

topbar.animate({

left: "290px"

}, { duration: 300, queue: false });

pagebody.animate({

left: "290px"

}, { duration: 300, queue: false });

});

}

function closeme() {

var closeme = $(function() {

topbar.animate({

left: "0px"

}, { duration: 180, queue: false });

pagebody.animate({

left: "0px"

}, { duration: 180, queue: false });

});

}

接下来,我为打开和关闭菜单定义了两个重要的函数。除非我们确实需要两种截然不同的动画元素,否则我们可以在一个单一的函数和回调切换中完成此项设计,但不幸的是, jQuery并不能帮助我们解决这个问题,所以我们需要求助于其它的替代语法。

这两个函数我暂且命名为topbar和pagebody。内容区域的白色背景就是pagebody;我们把标题栏放置在页面的顶部。这就意味着每当我们点击打开或者关闭按钮时,我们需要把topbar和pagebody向左和向右平移290px。

4. 加载动态内容

理论上,上述代码基本上就能满足大部分人创建一个简单移动的需求,但是,在这里我还想添加一些另外的东西。

每当用户点击一个菜单链接,页面会自动关闭当前的导航栏目和显示一个加载的GIF图像。当页面内容加载完成时,页面会去除GIF图片,并且显示已加载好的内容。通过使用static .htm,我们可以很轻松的完成这项工作,从而避免了PHP、Ruby、Perl或者任何后端语言所带来的困扰。

点击设置

首先,我们需要测试导航按钮。当用户点击导航按钮,页面会停止href的正常加载,此时,我们可以利用函数来显示外部内容。

// loading page content for navigation

$("a.navlink").live("click", function(e){

e.preventDefault();

var linkurl   = $(this).attr("href");

var linkhtmlurl = linkurl.substring(1, linkurl.length);

var imgloader  = ‘<center style="margin-top: 30px;"><img src="img/preloader.gif" alt="loading..." /></center>‘;

通过上段代码,每当用户点击导航菜单链接时,我们会停止当前页面加载并且设置一个完整的URL变量。此外,我还创建一个包含标准图像Loader的HTML变量。如果你想定制自己的图像加载方式,Ajaxload会是一个很不错的助力。

Ajax.Load()

要实现这个功能我们需要两段不同的代码,下面这段代码不仅能帮助我们关闭导航菜单和滑动文档窗口,而且还能帮助我们使用一个较小的加载动画来替代当前页面内的主体内容。

closeme();

$(function() {

topbar.css("top", "0px");

window.scrollTo(0, 1);

});

当外部页面的内容加载完成时,我们要用外部的加载页面来取代页面上的加载动画。通常情况下,这将只需要几百毫秒甚至更快,所以我设置了超时功能。

content.html(imgloader);

setTimeout(function() { content.load(linkhtmlurl, function() {

/* no callback */

}) }, 1200);

时间: 2024-10-13 00:30:24

用jQuery Mobile创建Web App的相关文章

手把手教学,用jQuery Mobile创建Web App

[范例4-1  简单的页面hello world] [html] view plaincopy 01     <!DOCTYPE> 02     <htmlxmlnshtmlxmlns="http://www.w3.org/1999/xhtml"> 03     <head> 04       <meta http-equiv="Content-Type"content="text/html; charset=ut

利用JQuery Mobile开发web app

什么是web app web app 是基于web的应用程序,是针对移动设备优化后的web站点,它具有 开发成本低——采用web开发技术,不需要考虑跨平台以及底层适配问题: 升级简单——不需要通知用户,在服务端更新文件即可: 维护方便——本质是站点,所以维护方式于web站点相同 等优点.开发web app使用的技术:前端 html5 + css + JavaScript / 后端 php | java | .net. 随着 html5 的发展,我们能使用越来越多的功能,比如:地理定位.本地数据储

web app开发——使用jQuery Mobile创建餐厅订餐应用

从零开始创建移动Web应用需要编程者学习专门的移动编程知识技能,还要有比如专门的编码工具(比如专门为iOS系统开发应用的工具),再有就是需要在每一个平台都进行测试部署(如Andr??oid,iOS,BlackBerry,Windows Mobile等). 这样的话,开发移动应用将花费不少,而另一个解决方案是再使用HTML,CSS,Javascript,它们的特点是跨平台和跨设备.此外,目前已 经出现了不少专为移动web应用开发的专门框架,比如jQuery Mobile.jQuery Mobile

史上最简单的个人移动APP开发入门--jQuery Mobile版跨平台APP开发

书是人类进步的阶梯. ——高尔基 习大大要求新新人类要有中国梦,鼓励大学生们一毕业就创业.那最好的创业途径是什么呢?就是APP.<构建跨平台APP-jQuery Mobile移动应用实战>就是一本写给没钱没身份没资历的创业小白看的APP书,看完这本书你可以拥有自己的一个APP,不用花钱就能移植到其他移动平台,支持iOS,Android,Windows Phone!!!!!!!!找个最便宜的来练手吧!  小白APP交流Q群:  348632872 清华大学出版社推出的<构建跨平台APP:j

jquery mobile 移动web(2)

button 按钮 data-role="button" 将超链接变成button. 具有icon 图标的button 组件. 提供了18常用的图标 data-icon ="" 1.arrow-1左箭头 2.arrow-r 右箭头 3.arrow-u 上箭头 4.arrow-d 下箭头 5.delete 删除 6.plus 加号 7.minus 减号 8.check 对号 9.gear 齿轮 10.refresh 刷新 11.forward 前进 12.back 返

jquery mobile 移动web(5)

有序列表 <div data-role="content"> <ol data-role="listview" data-theme="g"> <li><a href="#"> List 1</a></li> <li><a href="#"> List 2</a></li> <li&

jQuery Mobile 移动 web 应用程序框架

在这里我们主要讲一下如何引用jQuery Mobile(引用了jQuery Mobile,你就能引用jQuery Mobile里已经封装好的代码,让开发更加快捷简单) 从 CDN 引用 jQuery Mobile(推荐)——也就是以http外部链接调用jQuery Mobile库 从 jQuerymobile.com 下载 jQuery Mobile 库 下载jQuery Mobile库网址:http://jquerymobile.com/download/ 下载的库里包含着jQuerymobi

jquery mobile 移动web(4)

下拉菜单: 设置label 元素的for 属性为 select label 元素的文本内容作为选项的名称 定义div元素并设置data-role 属性值为 fieldcontain. <div data-role="controlgroup"> <label for="select" class="select">请选择你的兴趣</label> <select name="select"

使用 jQuery Mobile 与 HTML5 开发 Web App —— jQuery Mobile 事件详解

在前文<使用 jQuery Mobile 与 HTML5 开发 Web App —— jQuery Mobile 默认配置与事件基础>中,Kayo 对 jQuery Mobile 事件的基础作出了一些说明,建议在阅读本文前首先阅读前文,这里 Kayo 再引用前文的重要内容. “jQuery Mobile 在基于本地事件上,创建了一系列的自定义事件,大部分事件是基于触摸设备的使用情况开发的,当然这些事件对于桌面环境也会有适当的处理,开发者可以使用 bind() 函数绑定到需要的页面对象中. 值得