经过一个半月的摸索,JQuery Mobile移动设备上网页开发总算告一段落了, 版本已发布出去了,感觉不是很完美,现在总结一下,有类似运用的朋友可以交流一下,希望能够起到抛砖引玉的效果
1.官方DEMO地址: http://jquerymobile.com/
2.官方论坛地址: http://forum.jquery.com/
3.开发过程中遇到的问题示例:
3.1 主题(data-theme)的问题
jquery mobile的主题有下面几种
data-theme="a"
data-theme="b"
data-theme="c"
data-theme="d"
data-theme="e"
各种主题的效果请参考:http://jquerymobile.com/demos/1.0b2/#/demos/1.0b2/docs/pages/pages-themes.html
当然一般开发的时候,不会都用默认的jquery mobile风格的主题,通常要用公司风格的主题样式,下面是我扩展jquery mobile的主题,我从z开始,可以从官方的主题css样式拷贝一份改改:
//jqm-theme-extend.css /* Z 一级标题样式 -----------------------------------------------------------------------*/ .ui-bar-z { border-top: 1px solid #33CC42; border-right: 0; border-bottom: 1px solid #1D7425; border-left: 0; background: #004000; color: #fff; font-weight: bold; line-height: 1.4; //背景色渐变效果 background-image: -moz-linear-gradient(top, #33CC42, #1D7425); background-image: -webkit-gradient(linear,left top,left bottom, color-stop(0, #33CC42), color-stop(1, #1D7425)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#049000', EndColorStr='#03b108')"; } .ui-bar-z, .ui-bar-z input, .ui-bar-z select, .ui-bar-z textarea, .ui-bar-z button { font-family: Helvetica, Arial, sans-serif; } .ui-bar-z .ui-link-inherit { color: #fff; } .ui-bar-z .ui-link { color: #7cc4e7; font-weight: bold; } .ui-body-z { border: 1px solid #C6C6C6; background: #cccccc; color: #333333; font-weight: normal; line-height: 1.4; background-image: -moz-linear-gradient(top, #e6e6e6, #cccccc); background-image: -webkit-gradient(linear,left top,left bottom, color-stop(0, #e6e6e6), color-stop(1, #cccccc)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#e6e6e6', EndColorStr='#cccccc')"; } .ui-body-z, .ui-body-z input, .ui-body-z select, .ui-body-z textarea, .ui-body-z button { font-family: Helvetica, Arial, sans-serif; } .ui-body-z .ui-link-inherit { color: #333333; } .ui-body-z .ui-link { color: #2489CE; font-weight: bold; } .ui-btn-up-z { border: 1px solid #049000; background: #049000; font-weight: bold; color: #fff; //去除背景色渐变效果 /* background-image: -moz-linear-gradient(top, #049000, #049000); background-image: -webkit-gradient(linear,left top,left bottom, color-stop(0, #049000), color-stop(1, #049000)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#049000', EndColorStr='#049000')"; */ } .ui-btn-up-z a.ui-link-inherit { color: #fff; } .ui-btn-hover-z { border: 1px solid #74C138; background: #33CC42; font-weight: bold; color: #fff; /* background-image: -moz-linear-gradient(top, #74C138, #74C138); background-image: -webkit-gradient(linear,left top,left bottom, color-stop(0, #74C138), color-stop(1, #74C138)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#74C138', EndColorStr='#74C138')"; */ } .ui-btn-hover-z a.ui-link-inherit { color: #fff; } .ui-btn-down-z { border: 1px solid #03B108; background: #03B108; font-weight: bold; color: #ffffff; /* background-image: -moz-linear-gradient(top, #03B108, #03B108); background-image: -webkit-gradient(linear,left top,left bottom, color-stop(0, #03B108), color-stop(1, #03B108)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#03B108', EndColorStr='#03B108')"; */ } .ui-btn-down-z a.ui-link-inherit { color: #fff; } .ui-btn-up-z, .ui-btn-hover-z, .ui-btn-down-z { font-family: Helvetica, Arial, sans-serif; text-decoration: none; } /* Y 二级标题 -----------------------------------------------------------------------*/ .ui-bar-y { border: 0; background: transparent; color: #004000; font-weight: normal; } .ui-body-y { border: 0; background: transparent; color: #004000; font-weight: normal; line-height: 1.4; } .ui-btn-up-y { border: 1px solid #049000; background: #049000; font-weight: bold; font-size: 14px; color: #fff; line-height: 1.4; /* background-image: -moz-linear-gradient(top, #049000, #049000); background-image: -webkit-gradient(linear,left top,left bottom, color-stop(0, #049000), color-stop(1, #049000)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#049000', EndColorStr='#049000')"; */ } .ui-btn-up-y a.ui-link-inherit { color: #fff; } .ui-btn-hover-y { border: 1px solid #74C138; background: #74C138; font-weight: bold; font-size: 14px; color: #fff; /* background-image: -moz-linear-gradient(top, #74C138, #74C138); background-image: -webkit-gradient(linear,left top,left bottom, color-stop(0, #74C138), color-stop(1, #74C138)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#74C138', EndColorStr='#74C138')"; */ } .ui-btn-hover-y a.ui-link-inherit { color: #fff; } .ui-btn-down-y { border: 1px solid #03B108; background: #03B108; font-weight: bold; font-size: 14px; color: #fff; /* background-image: -moz-linear-gradient(top, #03B108, #03B108); background-image: -webkit-gradient(linear,left top,left bottom, color-stop(0, #03B108), color-stop(1, #03B108)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#03B108', EndColorStr='#03B108')"; */ } .ui-btn-down-y a.ui-link-inherit { color: #fff; } .ui-btn-up-y, .ui-btn-hover-y, .ui-btn-down-y { font-family: Helvetica, Arial, sans-serif; text-decoration: none; } /* X 正文内容 -----------------------------------------------------------------------*/ .ui-bar-x { border: 1px solid #B3B3B3; border-collapse:collapse; background: transparent; color: #3E3E3E; font-weight: normal; font-size: 14px; line-height: 1.4; } .ui-bar-x, .ui-bar-x input, .ui-bar-x select, .ui-bar-x textarea, .ui-bar-x button { font-family: Helvetica, Arial, sans-serif; } .ui-body-x { border: 1px solid #B3B3B3; border-collapse:collapse; font-weight: normal; font-size: 14px; color: #333333; background: transparent; line-height: 1.4; } .ui-body-x, .ui-body-x input, .ui-body-x select, .ui-body-x textarea, .ui-body-x button { font-family: Helvetica, Arial, sans-serif; } .ui-body-x .ui-link-inherit { color: #333333; } .ui-body-x .ui-link { color: #2489CE; font-weight: bold; } .ui-btn-up-x { border: 1px solid #049000; background: #049000; font-weight: bold; font-size: 14px; color: #fff; /* background-image: -moz-linear-gradient(top, #049000, #049000); background-image: -webkit-gradient(linear,left top,left bottom, color-stop(0, #049000), color-stop(1, #049000)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#049000', EndColorStr='#049000')"; */ } .ui-btn-up-x a.ui-link-inherit { color: #fff; } .ui-btn-hover-x { border: 1px solid #74C138; background: #74C138; font-weight: bold; font-size: 14px; color: #fff; /* background-image: -moz-linear-gradient(top, #74C138, #74C138); background-image: -webkit-gradient(linear,left top,left bottom, color-stop(0, #74C138), color-stop(1, #74C138)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#74C138', EndColorStr='#74C138')"; */ } .ui-btn-hover-x a.ui-link-inherit { color: #fff; } .ui-btn-down-x { border: 1px solid #03B108; background: #03B108; font-weight: bold; font-size: 14px; color: #fff; /* background-image: -moz-linear-gradient(top, #03B108, #03B108); background-image: -webkit-gradient(linear,left top,left bottom, color-stop(0, #03B108), color-stop(1, #03B108)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#03B108', EndColorStr='#03B108')"; */ } .ui-btn-down-x a.ui-link-inherit { color: #fff; } .ui-btn-up-x, .ui-btn-hover-x, .ui-btn-down-x { font-family: Helvetica, Arial, sans-serif; text-decoration: none; }
3.2 修改页面的背景色,假设页面的都是这样:
<body> <div id="mainPage" data-role="page" class="type-index"> <decorator:body /> </div> </body>
type-index是jquery mobile里自带的样式,重写type-index这个样式如下:
//mobile.css /** 除登录界面以外的页面的背景及渐变色 */ div.type-index{ background:#f4f4f4; background-image: -webkit-gradient(linear,left top,left bottom, color-stop(0, #f4f4f4), color-stop(1, #f4f4f4)); }
3.3 解决手指向上滑动时,页面动态加载下一页的问题:
var clientHeight = document.body.clientHeight; //网页可见区域高
待续。。
3.4 页面之间的滑动效果的初探
待续。。
3.5 页面上比较难控制大小的元素的样式解决方法举例:
待续。。
3.6 Ajax的运用:
待续。。
3.6 fieldset的grid用法:
待续。。
4 移动设备网页性能上的顾虑:
待续。。
5 jquery mobile在移动设备网页上运用的不足:
待续。。
开个头,有空随时更新 。。
1 楼
codingstandards
2011-08-29
楼主继续努力
2 楼
pkwjava
2011-10-13
楼主大哥,我想问一下关于jqm异步请求的问题,我用$.ajax()在web浏览器中没有问题,但是一到手机上就获取不了数据,能否告知怎么解决?先谢过
3 楼
modiliany
2011-11-05
pkwjava 写道
楼主大哥,我想问一下关于jqm异步请求的问题,我用$.ajax()在web浏览器中没有问题,但是一到手机上就获取不了数据,能否告知怎么解决?先谢过
你用safari浏览器调试,如果能alert出查找的数据的话, 在safari mobile浏览器上应该没有问题的。
例子:
$.ajax({
url: this.url,
data: this.urlParams,
async: true,
dataType: "text",
success: function(data){
callBackFun(data);
isLoading = false;
},
//执行ajax时出错
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert(textStatus);
isLoading = false;
}
});
-------
例子:
//后台取明细
$.ajax({
url: viewUrl,
data: this.params,
async: true,
dataType: "xml",
success: function(data){
callBackFun(data);
isLoading = false;
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert(textStatus);
isLoading = false;
}
});
Jquery mobile是基于Jquery的,ajax异步方法的用法是一样的。
4 楼
modiliany
2011-12-25
pkwjava 写道
楼主大哥,我想问一下关于jqm异步请求的问题,我用$.ajax()在web浏览器中没有问题,但是一到手机上就获取不了数据,能否告知怎么解决?先谢过
alert和断点调试一下。
5 楼
modiliany
2012-02-02
如果用adriod模拟器,
需要在AndroidManifest.xml,里面加入
<uses-permission android:name="android.permission.INTERNET"/>
需要在AndroidManifest.xml,里面加入
<uses-permission android:name="android.permission.INTERNET"/>
6 楼
pkwjava
2012-02-03
做的是地址级联选择的东西,我把请求的改成同步就没有问题了,谢谢各位