jQuery Mobile提供了使用Javascript与框架(html5)通信以及进行内容管理的API。下面介绍具体事件。
文档事件
mobileinit事件会在jQuery Mobile框架载入内存之后、UI元素被渲染之前触发,开始使用这个事件处理程序改变一些UI全局选项。
jQuery Mobile文档事件的执行顺序通常是:
-
- mobileinit
- ready
- load
代码的位置:放在jQuery和jQuery Mobile框架之间。
配置
$.mobile可调用全局属性以及有用的方法。这个框架使用jQuery UI桌面版框架的部件结构,所谓部件即使由框架管理的控件。
每个部件都有一个对象构造器以及默认配置,这些默认配置可以在mobileinit中更改,更改后会影响到该页面上的每一个部件。
jQuery Mobile中可以使用部件的列表:
page、dialog、collapsible、fieldcontain、navbar、listview、checkboxradio、button、slider、textinput、selectmenu、controlgroup等。
有些富控件被组织委一个部件,文本输入类型都使用textinput,复选与单选按钮则都属于checkboxradio部件。
每个部件都有它自己的对象构造器,它代表了页面上每个对象的工作方式,可以通过$.mobile.<widget_name>.prototype来访问相应的原型。每个部件构造器都有一个option对象,通过这个对象可以定义部件的默认属性,$.mobile.page.prototype.options可用于定义应用到每个页面实例的默认属性。
注意:这些配置只在mobileinit事件中有效。
jQuery Mobile的核心功能之一是用于加载外部页面的Ajax框架。可用ajaxEnaled=false来禁用。
使用allowCrossDomainPages属性来强制框架支持加载外部页面。
具体配置请看官网。
- data-*工具
使用jQuery Mobile时经常需要处理data-*自定义属性。
jQuery:var button=$("a:jqmData(role='button')");
jQuery Mobile添加一个新的名为jqmData的过滤器,并会应用我们指定的命名空间,上面的代码可换为:
var button=$("a:jqmData(role='button')");
同时可以使用jqmData和jqmRemoveDate来代替原来的data和removeData函数。
- 页面工具
var currentPageId=$.mobile.activePage.id;
可以通过$.mobile.pageContainer属性访问当前页面的容器(通常为body元素)
最有用的工具是$.mobile.changePage方法,它允许我们跳转向另一个页面,就像用户点击了相应的链接一样。可以在javascript中通过这个方法来显示内部或外部页面。参数可以是字符串(外部链接),也可以指向内部页面的jQuery对象。
$.mobile.changePage("external.html");
$.mobile.changePage($("#pageId"));
changePage方法的第二个可选参数是一个对象,所有选项如图所示:
注意:加载的目标页面必须是一个jQuery Mobile文档。
$.mobile.loadPage方法,主要由changePage在加载外部页面时使用。可以使用loadPage预加载指定内容并将它插入dom中,然后再使用对应的jQuery Dom对象通过changePage方法转向它。
- 平台工具
用于查询当前的平台,详细请看<即学即用 141页>。
- 路径工具
可通过$.mobile.path访问。用是查询下,大体有绝对与相对路径的转换,是否为同域名,相对路径与绝对路径的判断。
比较有用的一个parseUrl(url),返回一个对象,各个属性对应该url的各个部分(protocol、hostname、port、pathname、directory、filename、hash以及更多)。
- UI工具
$.mobile.getInheritedTheme(element,defaultSwatch)方法,可以获得元素基于色样定义或继承应该应用的色样。
$.mobile.silentScroll(y)可以将页面滚动到任意位置,同时不显示动画,也不触发任何事件。
$.mobile.showPageLoadingMsg()和$.mobile.hidePageLoadingMsg(),可以显示及隐藏弹出的加载信息。
$.mobile.fixeTollbars.show()以及$.mobile.fixedToolbars.hide()显示及隐藏固定工具栏。工具栏可以全屏或者固定显示。 $.mobile.fixedToolbars.show(true)将立即显示工具栏,而没有淡入淡出动画。
动态内容
缺点:如果用户在某个新创建的页面上刷新当前页面,必须监听mobileinit并检查(通过读取页面地址中的散列值或某个页面事件)用户是否正在加载某个动态页面,否则无法刷新。第二次加载时,动态页面将不存在,得根据需要再次创建。
页面渲染完成后使用Javascript插入其他组件时,如果不触发create事件,这些组件可能无法正常渲染。
-
创建部件
动态创建部件需要调用部件对应的构造器,他们就是与部件名同名的jQuery函数。
例如:
将若干a元素转换为按钮,只需:$("a").button();
动态创建一个:$("<a>").attr("href","somewhere,html").button();
-
更新部件
如往一个列表视图中添加元素,或修改一个复选框。要实现这一点需要调用部件函数并传入字符串参数refresh。为空时不能刷新。
例如:$("#list1").listview("refresh");
-
创建网格
grid可以用于创建css网格的特殊部件,使用一个带子元素的html元素,并根据其子元素的数目将它转为n列的网格。
使用方法:$("#element").grid();
-
改变页面内容
例如 :
$("#content").html(newHtmlcontent);
$("#page1").trigger("create");
要更新一个容器,只需在页面上触发create事件,通常每个部件的构造器都会响应页面的create事件,以便检查是否需要创建对应的控件。
处理事件
-
页面事件
jQuery Mobile文档有不同的页面(内部或从外部加载),因此必须认真地考虑jQuery Mobile页面的加载。
每个页面(带data-role=“page”的元素)都有一组不同的事件,这些事件有一些可以全局处理(同时处理所有页面),有一些则只对某个特定页面有效。要全局处理页面事件,可以调用$(document).bind(),也可以调用更明确的$(":jqmData(role='page')").bind。或者使用live来代替bind,以便能绑定那些将来加入到Dom中的页面。
- 创建事件
pagebeforecreate:页面已插入dom,但是组件还未创建。
pagecreate:页面已被创建,但组件还未渲染。
pageinit:页面已完全加载。这应该是页面最常用的事件。
pageremove:页面已从dom移除(通常这是一个ajax加载的页面并且当前未激活)。
- 加载事件
对那些使用ajax加载的页面来说,事件处理程序 通常绑定在$(document)上,因为此时对应的页面还不在dom中,无法绑定对应处理程序。
可用的加载事件:
pagebeforeload:在所有ajax请求完成之前执行。
pageload:当新页面已被加载并插入到dom后执行。
pageloadfailed:指定页面无法加载时执行。
这些事件处理程序都会接收到两个参数,一个事件对象和一个数据对象。
第一个参数有一个preventDefault()方法,这个方法可以强制框架不显示默认的错误消息警告并提供自己的ui。
第二个参数,请参考官网。
- 显示事件
一个页面可以被初始化一次,但用户可以在页面访问历史中前进及后退。
事件分成页面改变事件和过渡事件。
有效的页面变化事件包括以下这几个:
pagebeforechang:在页面改变发生之前以及过渡开始之前执行。
pagechange:在页面改变完成之后执行。
pagechangefailed:页面改变无法完成时执行。
以上每个事件处理程序接受两个参数。
toPage:如果目标页面是外部页面,则值为目标页面的URL字符串;如果是内部页面则值为目标页面的Dom对象。
options:与发送到$.mobile.changePage的选项相同。
可用的过渡事件有以下这几个:
pagebeforeshow:在过渡并显示页面之前执行(页面仍然处于隐藏状态)。
pageshow:在页面已完成加载过渡并显示在屏幕上时执行。
pagebeforehide:在页面隐藏之前执行(页面仍然可见)。
pgehide:页面已经完成卸载过渡并已隐藏时执行。
每个过渡事件的处理程序都能接收到一个参数,值为相关页面的jQuery(封装的dom)对象。如果是一个显示事件,对应的是上一页的对象;如果是隐藏事件,对应的则是下一页的对象。
- 部件事件
每个能动态显示或隐藏内容的部件,例如collapsible等,都会触发一个updatelayout事件,因为页面布局已经发生了改变。
- 方向事件
orientationchange事件。强制仅当宽度和高度值更新后才触发这个事件,可以执行代码$.mobile.orientationChangeEnabled=false.
这个事件对应的处理程序将接收到一个字符串作为第一个参数,职位portrait(表示纵向)或landscape(表示纵向)。
- 手势事件
tap:在屏幕上快速地触摸一下时触发。
taphold:用户触摸屏幕并持续按住一秒钟时触发。在显示上下文菜单时很有用。
swipeleft:用户的手指从右划到左时触发。
swiperight:用户的手指从左划到右时触发。
- 虚拟点击事件
虚拟点击事件是一个包装,可用于取代触摸或点击事件,基于运行平台的不同它们将自动选择正确的事件。
虚拟点击事件的用法与点击事件完全相同,不同名称中有一个v作为前缀。jQuery Mobile中包括以下虚拟点击事件:vclick、vmousedown、vmousemove、vmouseup和vmousecancel。