1.底部导航切换界面

HTML部分:

  1. <nav class="mui-bar mui-bar-tab">
  2. <a id="defaultTab" class="mui-tab-item mui-active" href="a.html">
  3. <span class="mui-icon mui-icon-videocam"></span>
  4. <span class="mui-tab-label">社区</span>
  5. </a>
  6. <a class="mui-tab-item" href="b.html">
  7. <span class="mui-icon mui-icon-chatboxes"><span style="display: none;" class="mui-badge">1</span></span>
  8. <span class="mui-tab-label">群组</span>
  9. </a>
  10. <a class="mui-tab-item" href="c.html">
  11. <span class="mui-icon mui-icon-home"></span>
  12. <span class="mui-tab-label">我的</span>
  13. </a>
  14. </nav>

JavaScript部分:

  1. //mui初始化
  2. mui.init();
  3. var subpages = ['a.html', 'b.html', 'c.html'];
  4. var subpage_style = {
  5. top:'0px',
  6. bottom: '51px'
  7. };
  8. var aniShow = {};
  9. //创建子页面,首个选项卡页面显示,其它均隐藏;
  10. mui.plusReady(function() {
  11. var self = plus.webview.currentWebview();
  12. for (var i = 0; i < subpages.length; i++) {
  13. var temp = {};
  14. var sub = plus.webview.create(subpages[i], subpages[i], subpage_style);
  15. if (i > 0) {
  16. sub.hide();
  17. }else{
  18. temp[subpages[i]] = "true";
  19. mui.extend(aniShow,temp);
  20. }
  21. self.append(sub);
  22. }
  23. });
  24. //当前激活选项
  25. var activeTab = subpages[0];
  26. //选项卡点击事件
  27. mui('.mui-bar-tab').on('tap', 'a', function(e) {
  28. var targetTab = this.getAttribute('href');
  29. if (targetTab == activeTab) {
  30. return;
  31. }
  32. //显示目标选项卡
  33. //若为iOS平台或非首次显示,则直接显示
  34. if(mui.os.ios||aniShow[targetTab]){
  35. plus.webview.show(targetTab);
  36. }else{
  37. //否则,使用fade-in动画,且保存变量
  38. var temp = {};
  39. temp[targetTab] = "true";
  40. mui.extend(aniShow,temp);
  41. plus.webview.show(targetTab,"fade-in",300);
  42. }
  43. //隐藏当前;
  44. plus.webview.hide(activeTab);
  45. //更改当前活跃的选项卡
  46. activeTab = targetTab;
  47. });
  48. //自定义事件,模拟点击“首页选项卡”
  49. document.addEventListener('gohome', function() {
  50. var defaultTab = document.getElementById("defaultTab");
  51. //模拟首页点击
  52. mui.trigger(defaultTab, 'tap');
  53. //切换选项卡高亮
  54. var current = document.querySelector(".mui-bar-tab>.mui-tab-item.mui-active");
  55. if (defaultTab !== current) {
  56. current.classList.remove('mui-active');
  57. defaultTab.classList.add('mui-active');
  58. }
  59. });

2.自定义事件

监听自定义事件 - 目标页

  1. window.addEventListener('shijian',function(event){
  2. //通过event.detail可获得传递过来的参数内容
  3. ....
  4. var name = event.detail.namel
  5. console.log(name);
  6. shijian();
  7. })

触发自定义事件 - 本页

  1. //首先获得目标页面的对象
  2. var targetPage = plus.webview.getWebviewById('目标页面id');
  3. mui.fire(targetPage,'shijian',{
  4. //自定义事件参数
  5. name:'dongyixueyuan'
  6. });

3.页面预加载

所谓的预加载技术就是在用户尚未触发页面跳转时,提前创建目标页面,这样当用户跳转时,就可以立即进行页面切换,节省创建新页面的时间,提升app使用体验。mui提供两种方式实现页面预加载。

方式一:通过mui.init方法中的preloadPages参数进行配置

  1. mui.init({ // 可同时加载一个或者多个界面
  2. preloadPages:[ //加载一个界面
  3. {
  4. url:'a.html',
  5. id:'a',
  6. styles:{},//窗口参数
  7. extras:{},//自定义扩展参数
  8. subpages:[{},{}]//预加载页面的子页面
  9. },{ // 可加载另外一个界面,不需要可直接删除
  10. url:'b.html',
  11. id:'b',
  12. styles:{},//窗口参数
  13. extras:{},//自定义扩展参数
  14. subpages:[{},{}]//预加载页面的子页面
  15. }
  16. ]
  17. });

方式二:通过mui.preload方法预加载,一次只能预加载一个页面,若需加载多个webview,则需多次调用mui.preload()方法;

  1. mui.plusReady(function(){
  2. var productView = mui.preload({
  3. url: 'list.html',
  4. id: 'list',
  5. });
  6. console.log(productView); //获得预加载界面的对象
  7. });

4.消息框

警告消息框

  1. mui.alert('欢迎使用Hello 东翌学院','东翌学院',function(){
  2. alert('你刚关闭了警告框');
  3. });

消息提示框

  1. var btnArray = ['是','否'];
  2. mui.confirm('东翌学院是专业跨平台APP培训学院,赞?','Hello 东翌学院',btnArray,function(e){
  3. if(e.index==0){
  4. alert('点击了- 是');
  5. //自己的逻辑
  6. }else{
  7. alert('点击了- 否');
  8. }
  9. }); 

输入对话框

  1. var btnArray = ['确定','取消'];
  2. mui.prompt('请输入你对东翌学院的评语:','内容好','东翌学院',btnArray,function(e){
  3. if(e.index==0){
  4. alert('点击了 - 确认');
  5. var value = e.value; // value 为输入的内容
  6. }else{
  7. alert('点击了 - 取消');
  8. }
  9. });

自动消息对话框

  1. mui.toast('显示内容');

日期选择框

  1. //js里的月份 是从0月开始的,也就是说,js中的0月是我们1月
  2. var dDate=new Date(); //默认显示的时间
  3. dDate.setFullYear(2015,5,30);
  4. var minDate=new Date(); //可选择的最小时间
  5. minDate.setFullYear(2010,0,1);
  6. var maxDate=new Date(); //课选择的最大的时间
  7. maxDate.setFullYear(2016,11,31);
  8. plus.nativeUI.pickDate( function(e) {
  9. var d=e.date;
  10. alert('您选择的日期是:'+d.getFullYear()+"-"+(d.getMonth()+1)+"-"+ d.getDate());
  11. },function(e){
  12. alert('您没有选择日期');
  13. },{title:"请选择日期",date:dDate,minDate:minDate,maxDate:maxDate});

时间选择框

  1. var dTime=new Date();
  2. dTime.setHours(20,0); //设置默认时间
  3. plus.nativeUI.pickTime(function(e){
  4. var d=e.date;
  5. alert("您选择的时间是:"+d.getHours()+":"+d.getMinutes());
  6. },function (e){
  7. alert('您没有选择时间');
  8. },{title:"请选择时间",is24Hour:true,time:dTime});

5.原生模式ActionSheet

  1. var btnArray = [{title:"分享到微信"},{title:"分享到新浪微博"},{title:"分享到搜狐微博"}]; //选择按钮 1 2 3
  2. plus.nativeUI.actionSheet( {
  3. title:"分享到",
  4. cancel:"取消", //
  5. buttons:btnArray
  6. }, function(e){
  7. var index = e.index; //
  8. alert(index);
  9. switch (index){
  10. case 1:
  11. //写自己的逻辑
  12. break;
  13. case 2:
  14. break;
  15. }
  16. } );

6.下拉刷新

为实现下拉刷新功能,大多H5框架都是通过DIV模拟下拉回弹动画,在低端android手机上,DIV动画经常出现卡顿现象(特别是图文列表的情况); 通过双webview解决这个DIV的拖动流畅度问题;拖动时,拖动的不是div,而是一个完整的webview(子webview),回弹动画使用原生动画;在iOS平台,H5的动画已经比较流畅,故依然使用H5方案。两个平台实现虽有差异,但经过封装,可使用一套代码实现下拉刷新。

第一步: 创建子页面,因为拖动的其实是个子页面的整体

  1. mui.init({
  2. subpages:[{
  3. url:pullrefresh-subpage-url,//下拉刷新内容页面地址
  4. id:pullrefresh-subpage-id,//内容页面标志
  5. styles:{ top:subpage-top-position,//内容页面顶部位置,需根据实际页面布局计算,若使用标准mui导航,顶部默认为48px; .....//其它参数定义
  6. }
  7. }]
  8. }); 

第二步:内容页面需按照如下DOM结构构建

  1. <!--下拉刷新容器-->
  2. <div id="pullrefresh" class="mui-content mui-scroll-wrapper">
  3. <div class="mui-scroll">
  4. <!--数据列表-->
  5. <ul class="mui-table-view mui-table-view-chevron">
  6. <li class="mui-table-view-cell">1</li>
  7. </ul>
  8. </div>
  9. </div>  

第三步:通过mui.init方法中pullRefresh参数配置下拉刷新各项参数

  1. mui.init({
  2. pullRefresh : {
  3. container:"#pullrefresh",//下拉刷新容器标识,querySelector能定位的css选择器均可,比如:id、.class等
  4. down : {
  5. contentdown : "下拉可以刷新",//可选,在下拉可刷新状态时,下拉刷新控件上显示的标题内容
  6. contentover : "释放立即刷新",//可选,在释放可刷新状态时,下拉刷新控件上显示的标题内容
  7. contentrefresh : "正在刷新...",//可选,正在刷新状态时,下拉刷新控件上显示的标题内容
  8. callback : fn //必选,刷新函数,根据具体业务来编写,比如通过ajax从服务器获取新数据;
  9. } }
  10. }); 

第四步:设置执行函数

  1. function fn() {
  2. //业务逻辑代码,比如通过ajax从服务器获取新数据; ...... //注意,加载完新数据后,必须执行如下代码,注意:若为ajax请求,则需将如下代码放置在处理完ajax响应数据之后
  3. mui('#pullrefresh').pullRefresh().endPulldownToRefresh(); //这行代码会隐藏掉 正在加载... 容器
  4. }

7.上拉加载

第一步,第二步 和下拉刷新的一样

第三步:通过mui.init方法中pullRefresh参数配置下拉刷新各项参数

  1. mui.init({
  2. pullRefresh : {
  3. container:"#pullrefresh",//待刷新区域标识,querySelector能定位的css选择器均可,比如:id、.class等
  4. up : {
  5. contentrefresh : "正在加载...",//可选,正在加载状态时,上拉加载控件上显示的标题内容
  6. contentnomore:'没有更多数据了',//可选,请求完毕若没有更多数据时显示的提醒内容;
  7. callback : fn //必选,刷新函数,根据具体业务来编写,比如通过ajax从服务器获取新数据;
  8. }
  9. }
  10. }); 

第四步:设置执行函数

  1. function fn() {
  2. //业务逻辑代码,比如通过ajax从服务器获取新数据; ...... //注意,加载完新数据后,必须执行如下代码,true表示没有更多数据了,
  3. 两个注意事项: //1、若为ajax请求,则需将如下代码放置在处理完ajax响应数据之后 //
  4. 2、注意this的作用域,若存在匿名函数,需将this复制后使用
  5. var _this = this;
  6. _this.endPullupToRefresh(true|false);
  7. }

8.上拉下拉整合

第一步,第二步和下拉刷新一样

第三步:在mui.init()内同时设置上拉加载和下拉刷新

  1. mui.init({
  2. pullRefresh: {
  3. container: '#pullrefresh',
  4. down: {
  5. contentdown : "下拉可以刷新",//可选,在下拉可刷新状态时,下拉刷新控件上显示的标题内容
  6. contentover : "释放立即刷新",//可选,在释放可刷新状态时,下拉刷新控件上显示的标题内容
  7. contentrefresh : "正在刷新...",//可选,正在刷新状态时,下拉刷新控件上显示的标题内容
  8. callback: downFn // 下拉执行函数
  9. },
  10. up: {
  11. contentrefresh: '正在加载...',
  12. callback: upFn // 上拉执行函数
  13. }
  14. }
  15. }); 

注意: 给获取元素加onclick点击事件不行,需要加addEventListener自定义事件

9.手势

在开发移动端的应用时,会用到很多的手势操作,比如滑动、长按等,为了方便开放者快速集成这些手势,mui内置了常用的手势事件,目前支持的手势事件见如下列表:

分类    参数描述

点击     tap            单击屏幕

doubletap          双击屏幕

长按    longtap          长按屏幕

hold            按住屏幕

release           离开屏幕

滑动   swipeleft          向左滑动

swiperight          向右滑动

swipeup            向上滑动

swipedown           向下滑动

拖动   dragstart           开始拖动

drag              拖动中

dragend            拖动结束

  1. mui.init({
  2. gestureConfig:{
  3. tap: true, //默认为true
  4. doubletap: true, //默认为false
  5. longtap: true, //默认为false
  6. swipe: true, //默认为true
  7. drag: true, //默认为true
  8. hold:false,//默认为false,不监听
  9. release:false//默认为false,不监听
  10. }
  11. });

注意:dragstart、drag、dragend共用drag开关,swipeleft、swiperight、swipeup、swipedown共用swipe开关

  1. 你要监听的对象.addEventListener("swipeleft",function(){
  2. console.log("你正在向左滑动");
  3. }); 

10.遮罩

在popover、侧滑菜单等界面,经常会用到蒙版遮罩;比如popover弹出后,除popover控件外的其它区域都会遮罩一层蒙版,用户点击蒙版不会触发蒙版下方的逻辑,而会关闭popover同时关闭蒙版;再比如侧滑菜单界面,菜单划出后,除侧滑菜单之外的其它区域都会遮罩一层蒙版,用户点击蒙版会关闭侧滑菜单同时关闭蒙版。

遮罩蒙版常用的操作包括:创建、显示、关闭,如下代码:

  1. var mask = mui.createMask(callback);//callback为用户点击蒙版时自动执行的回调;
  2. mask.show();//显示遮罩
  3. mask.close();//关闭遮罩
  1. 遮罩css样式:   .mui-backdrop

11.滑动导航选择

mui提供了图片轮播、可拖动式图文表格、可拖动式选项卡、左右滑动9宫格组件,这些组件都用到了mui框架的slide插件,有较多共同点。首先,Dom内容构造基本相同,都必须有一个.mui-slider的父容器;其次,当拖动切换显示内容时,均会触发slide事件(可拖动式选项卡在点击选项卡标题时,也会触发slide事件),通过该事件的detail.slideNumber参数可以获得当前显示项的索引(第一项索引为0,第二项为1,以此类推),利用该事件,可在显示内容切换时,动态处理一些业务逻辑。

HTML部分:

  1. <div class="mui-slider">
  2. <!--选项卡标题区-->
  3. <div class="mui-slider-indicator mui-segmented-control mui-segmented-control-inverted">
  4. <a class="mui-control-item" href="#item1">待办公文</a>
  5. <a class="mui-control-item" href="#item2">已办公文</a>
  6. <a class="mui-control-item" href="#item3">全部公文</a>
  7. </div>
  8. <div class="mui-slider-progress-bar mui-col-xs-4"></div>
  9. <div class="mui-slider-group">
  10. <!--第一个选项卡内容区-->
  11. <div id="item1" class="mui-slider-item mui-control-content mui-active">
  12. <ul class="mui-table-view">
  13. <li class="mui-table-view-cell">待办公文1</li>
  14. <li class="mui-table-view-cell">待办公文2</li>
  15. <li class="mui-table-view-cell">待办公文3</li>
  16. </ul>
  17. </div>
  18. <!--第二个选项卡内容区,页面加载时为空-->
  19. <div id="item2" class="mui-slider-item mui-control-content"><ul class="mui-table-view">
  20. <li class="mui-table-view-cell">待办公文1</li>
  21. <li class="mui-table-view-cell">待办公文2</li>
  22. <li class="mui-table-view-cell">待办公文3</li>
  23. </ul></div>
  24. <!--第三个选项卡内容区,页面加载时为空-->
  25. <div id="item3" class="mui-slider-item mui-control-content"></div>
  26. </div>
  27. </div>

JavaScript部分:

  1. var item2Show = false,item3Show = false;//子选项卡是否显示标志
  2. document.querySelector('.mui-slider').addEventListener('slide', function(event) {
  3. if (event.detail.slideNumber === 1&&!item2Show) {
  4. //切换到第二个选项卡
  5. //根据具体业务,动态获得第二个选项卡内容;
  6. var content = 'er';
  7. //显示内容
  8. document.getElementById("item2").innerHTML = content;
  9. //改变标志位,下次直接显示
  10. item2Show = true;
  11. } else if (event.detail.slideNumber === 2&&!item3Show) {
  12. //切换到第三个选项卡
  13. //根据具体业务,动态获得第三个选项卡内容;
  14. var content = 'san';
  15. //显示内容
  16. document.getElementById("item3").innerHTML = content;
  17. //改变标志位,下次直接显示
  18. item3Show = true;
  19. }
  20. });

12.图片轮播

1, 支持循环

HTML部分:

  1. <div class="mui-slider">
  2. <div class="mui-slider-group mui-slider-loop">
  3. <!--支持循环,需要重复图片节点-->
  4. <div class="mui-slider-item mui-slider-item-duplicate"><a href="#"><img src="data:images/2.jpg" /></a></div>
  5. <div class="mui-slider-item"><a href="#"><img src="data:images/0.jpg" /></a></div>
  6. <div class="mui-slider-item"><a href="#"><img src="data:images/1.jpg" /></a></div>
  7. <div class="mui-slider-item"><a href="#"><img src="data:images/2.jpg" /></a></div>
  8. <!--支持循环,需要重复图片节点-->
  9. <div class="mui-slider-item mui-slider-item-duplicate"><a href="#"><img src="data:images/0.jpg" /></a></div>
  10. </div>
  11. </div>

2, 不支持循环 和循环不同的是没有再第一条和最后一条后面加入内容

HTML部分:

  1. <div class="mui-slider">
  2. <div class="mui-slider-group">
  3. <div class="mui-slider-item"><a href="#"><img src="data:images/0.jpg" /></a></div>
  4. <div class="mui-slider-item"><a href="#"><img src="data:images/1.jpg" /></a></div>
  5. <div class="mui-slider-item"><a href="#"><img src="data:images/2.jpg" /></a></div>
  6. <!--<div class="mui-slider-item"><a href="#"><img src="4.jpg" /></a></div>-->
  7. </div>
  8. </div>

JavaScript部分相同:

  1. //获得slider插件对象
  2. var gallery = mui('.mui-slider');
  3. gallery.slider({
  4. interval:5000//自动轮播周期,若为0则不自动播放,默认为0;
  5. });
  6. document.querySelector('.mui-slider').addEventListener('slide', function(event) {
  7. //注意slideNumber是从0开始的;
  8. alert("你正在看第"+(event.detail.slideNumber+1)+"张图片");
  9. });
  1. 注意:如果ajax获得图片后,需要在写入图片以后,需要从新调用一下
  1. gallery.slider();

mui框架(二)的更多相关文章

  1. MUI框架开发HTML5手机APP(二)--页面跳转传值&底部选项卡切换

      概 述 JRedu 在上一篇博客中,我们学习了如何使用Hbuilder创建一个APP,同时如何使用MUI搭建属于自己的第一款APP,没有学习的同学可以戳链接学习: http://www.cnblo ...

  2. 跨平台移动端APP开发---简单高效的MUI框架

    MUI是dcloud(数字天堂)公司旗下的一款跨平台开发移动APP的框架产品,在学习MUI框架之前,最先接触了Hbuilder代码编辑器,它带给我的第一感觉是快,这是HBuilder的最大优势,通过完 ...

  3. MUI框架开发HTML5手机APP(一)--搭建第一个手机APP

      前  言 JRedu 随着HTML5的不断发展,移动开发成为主流趋势!越来越多的公司开始选择使用HTML5开发手机APP,而随着手机硬件设备配置的不断提升,各种开发框架的不断优化,也使着H5开发的 ...

  4. MUI框架开发HTML5手机APP(一)--搭建第一个手机APP(转)

    出处:http://www.cnblogs.com/jerehedu/p/7832808.html  前  言 JRedu 随着HTML5的不断发展,移动开发成为主流趋势!越来越多的公司开始选择使用H ...

  5. MUI框架-14-使用自定义icon图标、引入阿里巴巴矢量图标

    MUI框架-14-使用自定义icon图标.引入阿里巴巴矢量图标 首先介绍介绍一下,前端必备的非常强大的 阿里巴巴矢量图标库:地址是:http://www.iconfont.cn/ 这里有丰富,精美,且 ...

  6. MUI框架-13-使用百度地图 API(图文教程)

    MUI框架-13-使用百度地图 API(图文教程) 后面有实例,转载请注明出处 一.申请百度地图权限 1.打开 百度地图开放平台:http://lbsyun.baidu.com/apiconsole/ ...

  7. MUI框架-11-MUI前端 +php后台接入百度文字识别API

    MUI框架-11-MUI前端 +php后台接入百度文字识别API 这里后台不止一种,Python,Java,PHP,Node,C++,C# 都可以 这里使用的是 php 来介绍,已经解决所有问题,因为 ...

  8. MUI框架开发HTML5手机APP

    出处:http://www.cnblogs.com/jerehedu/p/7832808.html  前  言 JRedu 随着HTML5的不断发展,移动开发成为主流趋势!越来越多的公司开始选择使用H ...

  9. mui框架中底部导航的跳转1

    mui框架极大的方便了app的开发但是我们在做页面之间的切换时发现不能实现 a 链接的跳转,这是应为mui相关的一些控件是通过拦截a标签上的href来实现的,所以mui.js会阻止a标签上的href跳 ...

随机推荐

  1. MySQL核心之双一原则

    所谓的双一就是指: sync_binlog=; innodb_flush_log_at_trx_commit= innodb_flush_log_at_trx_commit和sync_binlog这两 ...

  2. 记录一次mysql使用load into命令导入csv格式数据的过程

    今天从qwiklab实验获取一组数据,大概有5万条,在qwiklab实验室使用的是pgsql数据库,但是今天想把他插入本地的mysql数据库中. 1.首先是查看一下数据内容: 数据中有的是空值,有的是 ...

  3. python3: 数字日期和时间(1)

    ---恢复内容开始--- 1. 数字的四舍五入 Q: 你想对浮点数执行指定精度的舍入运算 A: 简单的使用内置的round(value, ndigits)函数即可. >>> roun ...

  4. document.getElementByClassName的兼容问题

    if(!document.getElementsByClassName){ document.getElementsByClassName = function(className, element) ...

  5. SDN 第四次上机作业

    1.建立以下拓扑,并连接上ODL控制器. 2.利用ODL下发流表,使得h3在10s内ping不通h1,10s后恢复. 3.借助Postman通过ODL的北向接口下发流表,再利用ODL北向接口查看已下发 ...

  6. 【转】DHCP工作过程详解

    DHCP动态主机配置协议的作用我想作为网管的兄弟们都应该知道了,这里我就不多废话了,今天我要谈的是DHCP的工作过程,了解了工作过程,要排除故障就容易了.   一.DHCP客户机初始化: 1. 寻找D ...

  7. Git——新手入门与上传项目到远程仓库GitHub(转)

    Git概述 什么是Git? 刚开始对这个东西也感到挺迷茫,并且问了好多已经学习android一段时间的同学也是一头雾水,直到了解并使用之后,才体会到Git的好处以及重要意义. Git:是目前世界上最先 ...

  8. mac apache的使用

    因为apache的安装目录/private/etc是默认隐藏的,所以我们需要通过文件夹前往/命令行的方法去找. 或命令行中输入: userdeMBP:~ user$ open /etc 然后都会打开相 ...

  9. 启动报错:Access denied for user 'root'@'localhost' (using password:YES)

    项目启动报错:Access denied for user 'root'@'localhost' (using password:YES) 原因:root帐户默认不开放远程访问权限,所以需要修改一下相 ...

  10. MP实战系列(十八)之XML文件热加载

    你还在为每次修改XML文件中的SQL重新启动服务器或者是等待几分钟而烦恼吗? 配置了热加载即可解决你的这个问题. 这就是XML文件热加载的目的,减少等待时间成本,提高开发效率. SSM框架配置(Spr ...