`

jqueryMobile使用

 
阅读更多

1. pageinit & pageshow

JQM的官方手册重点提醒了使用$(document).bind(‘pageinit’)代替$(document).ready()

但当你需要对某一个页面(page)编写其独享的Javascript脚本时, 选择器应该选择的是该page层, 而不是document, 并使用live()添加事件处理器。这在ajaxEnable=true的情况下尤为重要。

View Demo

JS :

$(document).bind('pageinit',function(){
    console.log('任意一个页面初始化时响应');});
$(document).bind('pageshow',function(){
    console.log('任意页面被显示时响应')});
$("#hello").live('pageinit',function(){
    console.log('只响应id为hello的页面初始化');});
$("#hello").live('pageshow',function(){
    console.log('只响应id为hello的页面被显示');});

Html :

<body><divid='hello'data-role='page'><divdata-role="content"><ahref="#world"data-role="button">Next</a></div></div><divid='world'data-role='page'><divdata-role="content"><ahref="#hello"data-role="button">Previous</a></div></div></body>

关于JQM事件的总结可以参考JQM脚本的引用及脚本写法经验

2. refresh

通过脚本修改JQM页面数据时, 通常需要再进行一次refresh。可以根据不同的类型选择以下对应的方法。

$('div#id').trigger('refresh');
$('ul#id').listview('refresh');
$('button#id').button('refresh');
$('input#id[type=checkbox]').checkboxradio('refresh');

还有更多的可以参考JQM的界面数据刷新

3. tap

JQueryMobile在Android设备上的tap事件会出现多次触发的问题, 对此可以参考Ghost Click

我们的解决方案是使用Google FastButton,

将原来需要用tap的地方改用fastbutton处理。

4. taphold

检查jquery.mobile-1.2.0.js, 1722行。

timer = setTimeout(function(){
    triggerCustomEvent( thisObject,"taphold", $.Event("taphold",{ target: origTarget }));}, $.event.special.tap.tapholdThreshold );

在触发taphold事件时没有清除handlers, 所以当taphold事件后, 本不应该被触发的tap事件也被触发了。

暂时修复的方案是在1722行添加:

timer = setTimeout(function(){
    clearTapHandlers();// <---- + 这一行
    triggerCustomEvent( thisObject,"taphold", $.Event("taphold",{ target: origTarget }));}, $.event.special.tap.tapholdThreshold );

这个bug存在于JQM1.2.0及以下版本。

5. swipe

JQM的swipe响应也是非常慢/诡异, 如果需要使用swipe事件, 建议寻找其他代替的方案, 如TouchSwipe

6. popup

你可以选择在脚本中生成popup, 并通过popup('open')popup('close')进行打开/关闭, 借此可以实现很多实用的功能。

如以下模拟confirm的效果:

var confirm =function(content, title, response){var html ="<div data-role='popup' id='mToast_confirm' data-theme='d' data-overlay-theme='b' style='max-width:340px;overflow:hidden;'><div class='ui-header ui-bar-a ui-corner-top'><h1 class='ui-title'>"+ title +"</h1></div><div class='ui-content'><p></p>"+ content +"<p></p><a data-role='button' data-inline='true' data-rel='back' data-mini='true'>取消</a><a id='mToast_confirm_response' data-role='button' data-theme='b' data-icon='check' data-inline='true' data-mini='true'>确定</a></div></div>",
        previous = $(".ui-popup-active div[data-role=popup]"),
        divConfirm = $("div#mToast_confirm");
    previous.popup('close');if(divConfirm.length >0){
        divConfirm.remove();}
    divConfirm = $(html).appendTo("div[data-role=page]:first");
    divConfirm.trigger('create')// <-- 生成popup.trigger('refresh').popup().find("#mToast_confirm_response").on('fastClick',function(){
            divConfirm.popup('close');
            previous.popup('open');
            response();});
    divConfirm.popup('open');// -->};

confirm('are you sure?','Confirm',function(){
    alert('sure');});

需要注意的是popup('open')前需要对div进行.trigger('create').trigger('refresh').popup()

此外, $.mobile.popup.active也非常实用, $.mobile.popup.active.element[0]将返回当前显示的popup层对象。

7. data-rel=back

当你发现使用data-rel=back的返回按钮响应速度难以忍受的时候, 可以为这个按钮单独绑定一个事件处理器。

如以下脚本将加快header上的返回按钮响应速度:

$(document).bind('pageinit',function(){
    $("div[data-role=page] > div[data-role=header] > a[data-rel=back]").bind("fastClick",function(event){
        $.mobile.back();returnfalse;});});

但这并不是一个好的解决方案, 如果你对back-rel=back的处理感兴趣可以查看jquery.mobile-1.2.0.js : 4141行。如果有更好的解决方案请告知我^_^。

8. BackButton (PhoneGap + JQM)

在PhoneGap+JQM的方案下, 发现Android手机上的返回硬键无效或者对popup的处理不正确时(多为ajaxEnable=false的情况), 加入以下脚本:

document.addEventListener("deviceready", backKeyListener,false);function backKeyListener(){
    document.addEventListener("backbutton", onBackKeyDown,false);function onBackKeyDown(){try{if($.mobile.popup.active){var popupDiv = $.mobile.popup.active.element;
                popupDiv.each(function(){if($(this).parent().hasClass('ui-popup-active')){
                        $(this).popup('close');returnfalse;}});}else{
                $.mobile.back();returnfalse;}}catch(e){
            console.log('BackButton Listener Catch : '+ e);}}}

如果这段脚本不起作用, 请再参考第十条经验, 对phonegapNavigation进行设置。

9. $.mobile.loading

建议把$.mobile.showPageLoadingMsg()以及$.mobile.hidePageLoadingMsg()的脚本改为$.mobile.loading('show')以及$.mobile.loading('hide')

这个方法同样可以配置内容、样式等参数: $.mobile.loading('show', {text : 'test', theme : 'a'});

更多的信息参考JQM API – methods中的描述

10. $.mobile.back()

如果你是使用PhoneGap + JQueryMobile进行开发, 设定了ajaxEnable=false, 并且发现$.mobile.back()无效, 那么请尝试设定phonegapNavigationEnable=true

当该值为true时, $mobile.back()会使用nav.app.backHistory();, 否则使用window.history.back();

但这个参数也 建议在ajaxEnable=false的情况下进行设置。

更多的信息可以参考JQM API – globalConfig中的描述

11. ajaxEnable

如果希望使用PhoneGap将应用打包为app, 我的建议是, 尽量使用ajaxEnable=true, 否则体验十分不好, 而且你还会遇到更多的问题。

此外应该给每一个page设定id, 并遵循第一条建议

12. 页面跳转

请使用$.mobile.changePage()代替window.location.href

如果要刷新当前页面呢? 我的方法是:

$.mobile.changePage($.mobile.activePage.jqmData('url'),{reloadPage :true});

但这理应不是最好的方法, 如果你有更好的方法请告知我^_^

13. 慎重选择JQueryMobile

如你所见, 使用JQM + PhoneGap进行WebApp开发会遇到许多问题。

但JQM目前还是只适合做简单的WebApp, 如果坚持做复杂, 其效率将会十分堪忧。

当然, 如果你选择了一个正确的方式, 那其中大部分都可以避免。

此外, Github上有许多项目对基于JQM的开发会有很大的帮助。

1. The-M-Project

The-M-Project的UI基于JQM, 但其拥有更好的结构, 并实现了一些你可能会需要的功能。其文档也十分健全, 你可以查看其更详细的介绍。你不一定使用这个框架, 但在JQM的开发上, 这个项目有许多值得借鉴的地方。

2. persistencejs

离线数据的库, 这里有一个结合JQM的Demo

3. artTemplate

出自腾讯CDC的javascript模板引擎。


 

分享到:
评论

相关推荐

    jQueryMobile使用指南中文WORD版

    资源名称:jQuery Mobile使用指南 中文WORD版内容简介:本文档是jQuery Mobile使用指南;jQuery Mobile框架可以轻松的帮助我们实现非常好看的、可跨设备的Web应用程序。我们将后续的介绍中向大家介绍大量的代码及...

    jqueryMobile 教程+手册+实例

    - **页面结构**:jQuery Mobile 使用分页的概念,每个页面由一个或多个 `&lt;div data-role="page"&gt;` 组成,页面间通过 AJAX 进行切换。 2. **页面和面板** - **页面加载与增强**:jQuery Mobile 会自动增强 HTML ...

    jQuery Mobile参考手册

    1.jQuery Mobile 是一个用于创建移动端web应用的的前端框架。 ...4.通过使用jQuery Mobile 可以 "写更少的代码,做更多的事情" : 它可以通过一个灵活及简单的方式来布局网页,且兼容所有移动设备。

    jquerymobile设计完整例子

    jQuery Mobile 使用无刷新技术(AJAX)来实现页面间的平滑切换。通过设置`data-rel="next"`或`data-rel="back"`,可以实现向后或向前的页面跳转。同时,`data-transition`属性可以指定过渡动画,如滑动、淡入淡出等...

    jQuery Mobile实战源码

    对于页面布局,jQuery Mobile使用了流式布局和媒体查询,确保在不同屏幕尺寸和方向下的良好显示。源码中的CSS文件,如`jquery.mobile.css`,包含了这些布局规则。你可以研究这些样式,理解如何创建适应性布局,以及...

    jquery mobile官方git资源

    1. **主题系统**:jQuery Mobile使用一套主题系统(ThemeRoller),通过CSS类定义页面元素的视觉样式。开发者可以根据需要自定义主题,确保应用的视觉一致性。 2. **数据属性和增强**:jQuery Mobile通过"data-...

    使用JqueryMobile开发购物网站

    1. **页面结构**:JqueryMobile使用数据属性(data-attributes)和HTML5的页面结构元素(如`&lt;div data-role="page"&gt;`)来组织内容。每个页面都被视为一个独立的单元,通过链接或程序导航在不同的页面之间切换,这种...

    jQuery Mobile快速入门源代码

    2. **页面结构与导航**:使用 jQuery Mobile,页面通常被组织成多个数据-URL定义的“页面”,允许在不刷新整个页面的情况下实现平滑的页面间导航。`&lt;div data-role="page"&gt;` 标签用于定义页面区域。 3. **增强型...

    JqueryMobile课件源码

    jQuery Mobile 使用主题系统,允许开发者通过简单的 CSS 类(如 `ui-body-a` 或 `ui-bar-b`)快速改变界面风格。通过修改主题 CSS 文件,甚至可以创建完全自定义的主题。 ### 九、事件和插件扩展 jQuery Mobile ...

    使用jQuery Mobile快速开发手机站点

    1. **jQuery Mobile的基本结构**:jQuery Mobile使用HTML5的数据属性(data-*)和页面结构来增强和自定义UI。例如,通过data-role="page"创建页面,data-role="header"和"data-role=footer"定义头部和底部栏。 2. *...

    jQuery mobile 开发案例

    本案例将深入探讨如何使用 jQuery Mobile 创建一个简单的移动端原型设计。 ### 一、jQuery Mobile 的核心概念 1. **数据属性(Data Attributes)**:jQuery Mobile 使用 HTML5 数据属性(data-*)来增强和定制 UI ...

    jqueryMobile入门练习项目

    1. **基础结构**:jQuery Mobile 使用数据属性(data- attributes)和页面结构来增强HTML元素,如`data-role="page"`定义页面,`data-role="header"`定义头部等。 2. **触发动画**:框架内嵌了平滑的过渡效果,通过...

    jQuery mobile菜单式的相册

    在网页设计中,相册是展示图片集的一个常见元素,而使用 jQuery Mobile 实现的菜单式相册则为用户提供了更直观、更具交互性的体验。jQuery Mobile 是一个轻量级的前端框架,专为移动设备设计,它提供了丰富的组件和...

    Jquery Mobile +Asp.net

    3. **页面架构**:JQuery Mobile 使用“页面”作为基本单位,而非传统的HTML文档,支持单页或多页布局。 4. **数据链接**:通过"data-" 属性进行增强,实现动态加载和更新内容,提高性能。 **ASP.NET MVC 框架** ...

    jQuery Mobile 1.1.1最新版

    4. **页面结构**:jQuery Mobile 强调页面的模块化和分页设计,使用数据属性(如 `data-role="page"`)来标识页面区域。这种设计使页面加载更快,减少了资源消耗,尤其是在移动网络环境下。 5. **组件库**:jQuery ...

    JQueryMobile UI 汇总

    1. **单一页面架构**:jQuery Mobile 使用单一页面模板,将多个页面的内容包含在一个 HTML 文件中,通过 AJAX 技术实现页面间的平滑切换,提高用户体验。 2. **触控优化**:所有的 UI 元素都经过优化,以适应触摸...

    JqueryMobile1.4.2最新版Demo

    在下载的 "JqueryMobile-1.4.2 Demo" 压缩包中,你可以找到各种示例页面和组件的实践应用,通过查看和分析这些例子,可以更直观地了解 jQuery Mobile 的功能和使用方法。结合实际项目需求,灵活运用这些知识,可以...

    开发者必读jQuery Mobile入门教程

    为了优化加载性能,jQuery Mobile使用了页面预加载机制,只加载当前显示的页面及其相关的数据。这在处理大量内容的移动应用时尤其有用,因为它减少了初始加载时间。 总的来说,jQuery Mobile为开发者提供了一套强大...

    jquery mobile 简明 教程 demo 移动 开发

    这个教程将带你深入理解如何使用 jQuery Mobile 进行移动应用开发,尤其适用于安卓手机平台。 ### 一、jQuery Mobile 基本概念 jQuery Mobile 提供了一套统一的 API 和 CSS 样式,使得开发者可以轻松创建具有一致...

    jquerymobile应用小实例

    1. CSS覆盖:jQuery Mobile使用一套预定义的CSS样式,以提供统一的外观。然而,为了满足特定的设计需求,我们需要对这些样式进行自定义。通过添加自定义CSS类或者直接修改jQuery Mobile的CSS文件,可以改变按钮、...

Global site tag (gtag.js) - Google Analytics