一、组件样式
2、表单
<input type="range" name="slider" id="slider" value="20" min="0" max="100" />
<input type="checkbox" data-role="flipswitch" name="flip-checkbox" id="flip-checkbox2" data-on-text="开" data-off-text="关" /> <select name="slider" id="slider2" data-role="slider"> <option value="off">关闭</option> <option value="on">开启</option> </select>
<fieldset data-role="controlgroup" data-type="horizontal"> <legend>单选(横向):</legend> <input type="radio" name="radio-choice-h-2" id="radio-choice-h-2a" value="on" checked="checked"> <label for="radio-choice-h-2a">选项一</label> <input type="radio" name="radio-choice-h-2" id="radio-choice-h-2b" value="off"> <label for="radio-choice-h-2b">选项二</label> <input type="radio" name="radio-choice-h-2" id="radio-choice-h-2c" value="other"> <label for="radio-choice-h-2c">选项三</label> </fieldset> <fieldset data-role="controlgroup"> <legend>复选:</legend> <input type="checkbox" name="checkbox-v-2a" id="checkbox-a" value="4" onclick="show(this.id)"> <label for="checkbox-a">四川帅哥</label> <input type="checkbox" name="checkbox-v-2b" id="checkbox-b" value="5" onclick="show(this.id)"> <label for="checkbox-b">重庆帅哥</label> <input type="checkbox" name="checkbox-v-2c" id="checkbox-c" value="6" onclick="show(this.id)"> <label for="checkbox-c">上海帅哥</label> </fieldset>
<select name="select-native-4" id="select-native-4" data-native-menu="false"> <option>请选择</option> <optgroup label="川菜"> <option value="1">川菜——1</option> <option value="2">川菜——2</option> <option value="3">川菜——3</option> <option value="4">川菜——4</option> </optgroup> <optgroup label="浙菜"> <option value="1">浙菜——1</option> <option value="2">浙菜——2</option> <option value="3">浙菜——3</option> </optgroup> </select>
3、可折叠内容块/手风琴
手风琴——头部
手风琴——内容区域
手风琴——测试展开折叠方法
展开
手风琴——1
这是内容区域这是内容区域这是内容区域
手风琴——2
这是内容区域这是内容区域这是内容区域
手风琴——3
这是内容区域这是内容区域这是内容区域
<div data-role="collapsible" data-collapsed="false" id="test_collapsible"> <h4>手风琴——头部</h4> <p>展开</p> </div> <div data-role="collapsible-set" data-theme="a" data-content-theme="a"> <div data-role="collapsible" data-collapsed-icon="carat-d" data-expanded-icon="carat-u"> <h3>手风琴——1</h3> <p>这是内容区域这是内容区域这是内容区域</p> </div> <div data-role="collapsible" data-collapsed-icon="carat-d" data-expanded-icon="carat-u"> <h3>手风琴——2</h3> <p>这是内容区域这是内容区域这是内容区域</p> </div> <div data-role="collapsible" data-collapsed-icon="carat-d" data-expanded-icon="carat-u" data-collapsed="false"> <h3>手风琴——3</h3> <p>这是内容区域这是内容区域这是内容区域</p> </div> </div>
//手风琴折叠 $("#test_collapsible").collapsible({ collapse: function(event,ui) { $("#popup_collapsible").popup("open",{ transition:"pop", positionTo:"window" }); $("#popup_collapsible").find("h3").text("手风琴已折叠"); } }); //手风琴展开 $("#test_collapsible").collapsible({ expand: function(event,ui) { $("#popup_collapsible").popup("open",{ transition:"pop", positionTo:"window" }); $("#popup_collapsible").find("h3").text("手风琴已展开"); } });
4、list列表
- Acura
- Audi
- BMW
- Cadillac
- Ferrari
<ul data-role="listview" data-filter="true" data-filter-placeholder="Search fruits..." data-filter-theme="a" data-inset="true"> <li><a href="#">Apple</a></li> <li><a href="#">Banana</a></li> <li><a href="#">Cherry</a></li> <li><a href="#">Cranberry</a></li> </ul>
5、popup组件
/*popup组件基本方法*/ //popup——打开 $("#f0").bind("tap",function(){ $("#popup_content").popup("open",{ transition:"pop", positionTo:"window" }) }) //popup——关闭 $("#f0").bind("tap",function(){ $("#popup_content").popup("close") })
6、panel面板
/*panel组件基本方法*/ //panel——打开 $("#meeting_summary").unbind().bind("tap",function(){ $("#popup_content").panel("open",{ position:"right", display:"overlay", theme: "b" }) }) //panel——关闭 $("#meeting_summary").unbind().bind("tap",function(){ $("#popup_content").panel("close"); })
7、选项卡
<div data-role="navbar"> <ul> <li><a href="#" class="ui-btn-active">One</a></li> <li><a href="#">Two</a></li> <li><a href="#">Three</a></li> <li><a href="#">Four</a></li> <li><a href="#">Five</a></li> </ul> </div> <div data-role="tabs"> <div data-role="navbar"> <ul> <li ><a href="#one" class="ui-btn-active">one</a></li> <li><a href="#two">two</a></li> <li><a href="#three">three</a></li> </ul> </div> <div id="one" class="ui-body-d ui-content" > <h3>First tab contents</h3> </div> <div id="two" class="ui-body-d ui-content"> <h3>Second tab contents</h3> </div> <div id="three" class="ui-body-d ui-content"> <h3>Third tab contents</h3> </div> </div>
a标签类中的href可以对应容器的id或是html文件名,并可加上过度效果,如果不想采用ajax跳转效果可以设置data-ajax="false"属性
a标签类中的href可以对容器局部的id
目前在多页面过度测试中存在自动刷新等问题,建议在多页面中自己配置该组件,单页面中不存在问题
8、搜索
<input type="search" id="search-input-2" placeholder="搜索按钮"> <div data-role="controlgroup" data-filter="true" data-input="#search-input-2"> <a href="#" class="ui-btn ui-shadow ui-corner-all">Button 1</a> <a href="#" class="ui-btn ui-shadow ui-corner-all">Button 2</a> <a href="#" class="ui-btn ui-shadow ui-corner-all" data-filtertext="sometext">data-filtertext="sometext"——Button 3</a> <a href="#" class="ui-btn ui-shadow ui-corner-all">Button 4</a> <a href="#" class="ui-btn ui-shadow ui-corner-all">Button 5</a> </div> <form> <input data-type="search" id="search-input" placeholder="搜索list列表..."> </form> <ul data-role="listview" data-filter="true" data-inset="true" data-input="#search-input"> <li>内容1</li> <li>内容2</li> <li>内容3</li> <li>内容4</li> <li>内容5</li> </ul>
9、table表格
序号 | 姓名 | 职业 | 工作年限 | 居住地 |
---|---|---|---|---|
001 | 王二小 | 放牛 | 10年 | 太原 |
002 | 王二 | 修车 | 5年 | 石家庄 |
003 | 王富贵 | 开车 | 12年 | 北京 |
004 | 王二 | 公司老总 | 20年 | 成都 |
序号 | 姓名 | 职业 | 工作年限 | 居住地 |
---|---|---|---|---|
001 | 王二小 | 放牛 | 10年 | 太原 |
002 | 王二 | 修车 | 5年 | 石家庄 |
003 | 王富贵 | 开车 | 12年 | 北京 |
004 | 王二 | 公司老总 | 20年 | 成都 |
<table data-role="table" data-mode="columntoggle" class="ui-responsive table-stroke" data-column-btn-theme="a" data-column-btn-text="请选择需要显示的列" data-column-popup-theme="b"> <thead> <tr> <th>序号 </th> <th data-priority="1">姓名 </th> <th data-priority="3">职业 </th> <th data-priority="2">工作年限 </th> <th data-priority="4">居住地 </th> </tr> </thead> <tbody> <tr> <td>001 </td> <td>王二小 </td> <td>放牛 </td> <td>10年 </td> <td>太原 </td> </tr> <tr> <td>002 </td> <td>王二 </td> <td>修车 </td> <td>5年 </td> <td>石家庄 </td> </tr> <tr> <td>003 </td> <td>王富贵 </td> <td>开车 </td> <td>12年 </td> <td>北京 </td> </tr> </tbody> </table>
10、网格布局(最多5列)
<div class="ui-grid-d"> <div class="ui-block-a" data-theme="b"> <p class="ui-bar ui-bar-b">A</p> </div> <div class="ui-block-b"> <p class="ui-bar ui-bar-a">B</p> </div> <div class="ui-block-c"> <p class="ui-bar ui-bar-b">C</p> </div> <div class="ui-block-d"> <p class="ui-bar ui-bar-a">D</p> </div> <div class="ui-block-e"> <p class="ui-bar ui-bar-b">E</p> </div> </div>
11、jquery mobile自定义主题样式
首先,在主题编辑网站http://themeroller.jquerymobile.com将主题编辑好,并下载到本地
其次,在head里面加入如下链接即可
最后,在需要调用的地方写上data-theme="c"(这里我设置的是C)即可
测试自定义主题二、组件动作
1、容器过度效果
2、动态创建组件
很多时候我们在实际开发过程中需要动态创建组件,比如对话框,list,选项卡等,在这里我们通常的方法只能得到原生的html,并 没有增强效果,因此,我们需要如下方式:
a标签类按钮禁用需加上class='ui-disabled'
botton标签类按钮禁用需加上disabled='disabled'
图标按钮中文字超过4个字的按钮,需要添加class="ui-btn-icon-lineheight2em"
3、组件刷新
$('#id').listview('refresh');
- 测试数据1
- 测试数据2
- 测试数据3
- 测试数据4
$("#list_click").toggle( function () { $("#list1").append("
$("#id").slider("refresh");
$("#slider_click").click(function () { $("#slider1").val("50").slider("refresh"); });;
$("#id").slider('refresh');
$("#switch_click").click(function () { var myswitch = $("#switch1"); myswitch[0].selectedIndex = 1;//1、2分别表示开或关 myswitch.slider("refresh"); });
$("#id").selectmenu('refresh');
$("#select_click").click(function () { var myswitch = $("#select1"); myswitch[0].selectedIndex = 3; myswitch.selectmenu("refresh"); });
$("#id").checkboxradio('refresh');
$("#radio_click_1").click(function () { $(".radio1").prop("checked",false).checkboxradio('refresh'); $(".radio2").prop("checked", true).checkboxradio("refresh"); }); $("#radio_click_2").click(function () { $("input[name='man']").removeAttr("checked").checkboxradio('refresh'); $("input[value='3']").attr("checked").checkboxradio('refresh'); });
$("#id").checkboxradio('refresh');
$("#checkbox_click_1").click(function () { $(".checkbox_select").prop("checked", true).checkboxradio("refresh"); }); $("#checkbox_click_2").toggle( function () { $('#checkbox-2a,#checkbox-2c').attr('checked', true).checkboxradio('refresh'); }, function () { $('#checkbox-2a,#checkbox-2c').removeAttr('checked').checkboxradio('refresh'); } )
$("#id").buttonMarkup('refresh')/button('refresh');
$("#button_click_1").toggle( function () { $("#button1").val("按钮修改完成——1").button("refresh"); $("#button2").text("按钮修改完成——2"); }, function () { $("#button1").val("修改完成——3").button("refresh"); $("#button2").text("按钮修改完成——4"); } ) $("#button_click_2").toggle( function () { var button_model = $("<input type='button' value='开始' />"); $(".button0").append(button_model); $(button_model).button("refresh"); }, function () { var button_model = $("<input type='button' value='开始—1' />"); $(".button0").append(button_model); $(button_model).buttonMarkup("refresh"); } )
$("#id").table('refresh');
$("#id").table-columntoggle( "refresh" );
序号 | 姓名 | 职业 | 工作年限 | 居住地 |
---|---|---|---|---|
001 | 王二小 | 放牛 | 10年 | 太原 |
002 | 王二 | 修车 | 5年 | 石家庄 |
003 | 王富贵 | 开车 | 12年 | 北京 |
004 | 王二 | 公司老总 | 20年 | 成都 |
$("#table_click_1").toggle( function () { var tr_obj = $("<tr><td>005</td><td>杨波</td><td>销售总监</td><td>5年</td><td>四川成都</td></tr>"); $("#my_table").append(tr_obj).table("refresh"); tr_obj.css("background","rgb(213, 253, 255)"); }, function () { $("#add_tr").remove(); } ) $("#table_click_2").one("click",function () { $(".table_address").attr("data-priority","4"); $("#my_table").table('refresh'); });
4、进度加载
//显示加载器 jquery Mobile function showLoader(text, text_visible, theme, text_only, html_content) { $.mobile.loading('show', { text: text, //加载器中显示的文字 textVisible: text_visible, //是否显示文字 theme: theme, //加载器主题样式a-b textonly: text_only, //是否只显示文字 html: html_content //要显示的html内容,如图片等 }); } //隐藏加载器jQuery Mobile function hideLoader() { //隐藏加载器 $.mobile.loading('hide'); } $("#show_bar_a").tap(function () { showLoader("加载中...", true, "a", false, ""); }); $("#show_bar_text_a").tap(function () { showLoader("加载中...", true, "a", true, ""); }); $("#show_bar_b").tap(function () { showLoader("加载中...", true, "b", false, ""); }); $("#show_bar_text_b").tap(function () { showLoader("加载中...", true, "b", true, ""); }); $("#user_defined").tap(function () { showLoader("", true, "b", false, "加载中...
"); }); $("#hide_bar").tap(function () { hideLoader(); });
5、jqm事件执行过程
Jquery Mobile提供了一些建于本地事件的自定义事件以用来创建一些有用的钩子. 要注意这些事件是建立于各种已存在的触摸事件之上, 比如 鼠标和窗口事件,所以你根据这些事件的存在可以将它们绑定到手持或者桌面的环境中。 在使用中你可以通过使用 live() 或者 bind()将他们绑定到其他的Jquery事件。
jQuery Mobile 包括一个初始化事件,该事件甚至会先于jQuery的document.ready事件进行加载。 jQuery Mobile 实际上在文档对象本身上触发其初始化事件,第一个触发的事件是mobileinit。 当Jquery Mobile开始执行时,他就会在document对象上触发mobileinit 事件,因为mobileinit事件是在加载 后马上触发,所以你需要在Jquery Mobile加载之前绑定你的事件处理函数
如果要扩展 mobileinit 事件,您首先需要将它与一个自定义函数进行绑定。可使用 bind 方法扩展mobileinit事件, 来覆盖默认配置(全局选项)。 $(document).bind("mobileinit", function(){ //覆盖的代码 });
页面切换的时候通过$(document).bind("pagebeforechange", beforechange);来绑定pagebeforechange事件的触发函数 handleChangePage(e,data)。页面跳转时pagebeforechange事件会被触发两次,第一次触发时data.toPage是到达页面的url, 类型是string,第二次触发时data.toPage不是String类型 ,此时可以获取到达页面的信息。为了获得到达页面的信息, 所以我们需要获得第二次触发时候的event,可以简单通过if(typeof data.toPage != “string”)来判断, 这时候可以用e.target.baseURI来获取到达页面的URI,并通过这个URI来解析出附带的参数信息。然后通过 e.target.find(“pageId”)来获取到达页的相应组件,并进行相应的操作。
测试数据交换/** * 自定义数据方法说明 * @param definedFun 自定义方法 */ function beforechange(definedFun) { $(document).unbind("pagebeforechange").bind("pagebeforechange", function(e,data){ //这个事件会调用两次,但每次的data内容不一样,所以要判断 if (typeof data.toPage != "string") { // 该函数解析一个URL地址,并返回一个含所有参数值的对象,这些参数值能够让我们很轻松地访问URL地址上的参数属性。 var thisUrlObj = $.mobile.path.parseUrl(e.target.baseURI); //取到page活动状态的容器对象 var pageActiveObj = $.mobile.path.parseUrl(data.toPage); if(typeof definedFun == "function"){ definedFun(e,thisUrlObj,data,pageActiveObj); } } }); } /** * 解析url参数示例——字符串格式id=34&key=perfect&action=go * @param string 字符串 */ function getUrlParam(string) { var obj = new Array(); if (string.indexOf("?") != -1) { var string = string.substr(string.indexOf("?") + 1); var strs = string.split("&"); for(var i = 0; i < strs.length; i ++) { var tempArr = strs[i].split("="); obj[i] = tempArr[1]; } } return obj; } /** * 下一个页面数据方法 * @param pageUrl url地址 * @param sectionId 容器id * @param definedFun 自定义方法 */ function setNextPageData(pageUrl,sectionId,definedFun){ beforechange(definedFun); $.mobile.changePage(pageUrl,{ transition: "slide", type:"post", data:"对面的美女看过来",//(object或string, 默认值: undefined) Ajax 请求时发送的数据。仅当pageUrl参数的值为一个URL时可用。 reverse: false //转场特效是否反向 changeHash: false //断地址栏上的哈希值是否应该被更新。 }) } $("#test_music").bind("tap",function(){ var user_url = "testData2.html"; var url_data = user_url+"?id=34&key=perfect&action=go"; setNextPageData(url_data,"#page1",function(event,thisUrlObj,data,pageActiveObj){ if (thisUrlObj.href.search(user_url) != -1) { var page = $(event.target).find("#page2"); var ajax_data = data.options.data; var url_data = getUrlParam(thisUrlObj.href); page.find("h1").html(url_data[0]); page.find("#test_book").html(url_data[1]); page.find("h4").html(url_data[2]); pageActiveObj.find("#test_music_text").html("欢迎你来到音乐专区"); pageActiveObj.find("#test_music_content").append(''+ajax_data+'
'); } }); })
当一个外部页面加载到 DOM 时,会触发两个事件 —— 第一个事件是 pagebeforeload,第二个是 pageload 或 pageloadfailed。 第一个:pagebeforeload--->在加载请求发出之前触发,绑定到这个事件的回调函数可以该事件调用preventDefault(),来表明由他们来处理加载的请求。 这样的做的话回调函数必须对通过数据对象传到回调函数的对象调用resolve()或者reject()。通过第二个参数传到回调函数的对象包含如下的属性: url (字符串):通过回调传到$.mobile.loadPage()的绝对或者相对地址 absUrl (字符串):url的绝对地址版本。 dataUrl (字符串):绝对地址的当识别页面或者更新浏览器地址的时候使用的绝对地址经过过滤的版本 deferred (对象):针对此事件调用preventDefault()的回调函数必须针对此事件调用 resolve()或者reject()方法,使得changePage()的请求恢复。
$( document ).bind( "pagebeforeload", function( event,data){ // 阻止默认行为,告知浏览器本次事件由事件的回调函数(即本函数)处理 event.preventDefault(); // 自定义处理,如简单的弹出一个提示 alert('本次事件由开发者作出一些处理'); // 在本函数或者其它异步方法中调用 resolve() // 告知 $.mobile.changePage() 方法继续页面请求并执行 done() 回调函数队列 data.deferred.resolve( data.absUrl, data.options, page ); //data.deferred.rejected( data.absUrl, data.options ); });
pagebeforecreate——>在页面开始初始化之前触发,这时 DOM 已被 jQuery Mobile 获得,但仍未进行 jQuery Mobile 增强,因此绑定这个事件并在回调函数中作出处理可以在页面被增强前进行自定义处理。 另外若阻止事件的默认行为,会禁止页面组件初始化。 pagecreate——>在页面初始化时,即 DOM 刚开始被创建,并且需要进行 jQuery Mobile 的元素已经准备好(即加入待增强列表),但仍未实际开始进行 jQuery Mobile 增强前触发。
当页面初始化后触发,jQuery Mobile 建议使用这个事件的绑定代替 jQuery 中常用的 DOM ready() , 因为触发这个事件意味着页面已经直接或者通过 Ajax 加载好并增强,更适合用在 jQuery Mobile 开发中。
pagebeforeshow——>每次页面加载的时候都会触发,在页面渲染之前。此事件回调函数传回的数据对象中有一个 "prevPage"属性,该属性是一个jquery集合对象,它可以获取正在切换远离页面的全部DOM元素。 pagebeforehide——>每次转到新页面之前都会触发当前页面的该事件,在当前页面隐藏之前。此事件回调函数传回的 数据对象中有一个"nextPage"属性,该属性是一个jquery集合对象,它可以获取正在切换目标页面的全部DOM元素 pageshow——>每次页面加载的时候都会触发,在页面渲染之后。此事件回调函数传回的数据对象中有一个"prevPage" 属性,该属性是一个jquery集合对象,它可以获取切换之前上一页面的全部DOM元素 pagehide——>每次转到新页面之前都会触发当前页面的该事件,在当前页面隐藏之后。每次页面加载的时候都会触 发,在页面渲染之后。此事件回调函数传回的数据对象中有一个"nextPage"属性,该属性是一个jquery集合对象, 它可以获取切换之后当前页面的全部DOM元素
$("#page2").bind("pagebeforehide",function(event, ui){ alert('1. ' + ui.nextPage[0].id + ' 正在显示中... ') }) $("#page2").bind("pagebeforeshow",function(event, ui){ alert('2. ' + ui.prevPage[0].id + ' 正在隐藏中... ') }) $("#page2").bind("pagehide",function(event, ui){ alert('3. ' + ui.nextPage[0].id + ' 显示完成... ') }) $("#page2").bind("pageshow",function(event, ui){ alert('4. ' + ui.prevPage[0].id + ' 隐藏完成... ') })测试jqm整个事件执行过程
三、扩展组件
1、iscroll移动端滚动条
之所以iscroll会诞生,主要是因为无论是在iphone、ipad、android 或是更早前的移动webkit都没有提供一种原生的方式来支持在一个固定高度的容器内滚动内容。 这个不幸的规则导致所有web-app要模拟成app的样子时,只能由一个绝对定位的header 或是footer再加上一个可以内容的滚动的中间区域组成。 幸运的是移动webkit提供了一种强大的硬件加速的CSS属性,这个属性可以用来模拟这个缺失的功能,iscroll从这里开始了前进之路。
iScroll需要对所要进行滚动的元素进行初始化,并且不限定一个页面中使用iScroll的元素的个数(这里不考虑您的硬件配置)。 滚动元素中内容的类型和长度在一定程度上将会影响iScroll脚本库里可以同时使用的元素的个数。 使用iScroll这个脚本库时,DOM树的结构要足够简单,移除不必要的标签,尽量避免过多的标签嵌套使用。
<div id="wrapper"> <ul> <li></li> ..... </ul> </div>
iScroll里的第一个参数很简单就是外容器的id,或者css语法格式的class,如'.home .scroll'。第二个参数允许你自定义一些属性配置和方法
是否显示水平滚动条(true/false)
是否显示垂直滚动条(true/false)
在iOS系统上,当元素拖动超出了scroller的边界时,滚动条会收缩,设置为true可以禁止滚动条超出scroller的可见区域。false否true 是默认在Android上为true,iOS上为false
是否隐藏滚动条 false否true是,默认在Android上为false,iOS上为true
滚动条是否渐隐渐显 false否true是,默认在Android上为false,iOS上为true
字定义滚动条的样式名,自定义class
iscroll4中文API iscroll官网 iscroll上下拉动刷新示例 iscroll滚动条示例1、按钮
在框架中默认情况下按钮是横向独占根据屏幕宽度横向自适应的,但是我们在应用的应用中经常需要在一行中显示多个按钮, 这时候我们就需要知道一个新的叫做内联模式的属性了data-inline="true"。
<a href="#" data-role="button">取消</a> <a href="#" data-role="button" data-inline="true">保存</a> <a href="#" data-role="button" data-inline="true" data-iconpos="left" data-icon="delete">按钮</a> <a href="#" data-role="button" data-inline="true" data-iconpos="right" data-icon="arrow-d">按钮</a> <a href="#" data-role="button" data-inline="true" data-iconpos="top" data-icon="arrow-u">按钮</a> <a href="#" data-role="button" data-inline="true" data-iconpos="bottom" data-icon="arrow-r">按钮</a> <a href="#" data-role="button" data-inline="true" data-iconpos="notext" data-icon="delete">按钮</a>
a标签类按钮禁用需加上class='ui-disabled'
botton标签类按钮禁用需加上disabled='disabled'
图标按钮中文字超过4个字的按钮,需要添加class="ui-btn-icon-lineheight2em"