在app开发中,若要使用HTML5+扩展api,必须等plusready事件发生后才能正常使用,mui将该事件封装成了mui.plusReady()方法,涉及到HTML5+的api,建议都写在mui.plusReady方法中
mui框架将很多功能配置都集中在mui.init方法中,要使用某项功能,只需要在mui.init方法中完成对应参数配置即可,
目前支持在mui.init方法中配置的功能包括:
创建子页面、
关闭页面、
手势事件配置、
预加载、
下拉刷新、
上拉加载、
设置系统状态栏背景颜色。
1.mui.openWindow()
在app中打开一个新的页面,可以用mui.openWindow()直接打开,以下是openWindow的一些参数
mui.openWindow({
url:new-page-url, // 新页面的url
id:new-page-id, // 新页面的id标识
styles:{
top:newpage-top-position,//新页面顶部位置
bottom:newage-bottom-position,//新页面底部位置
width:newpage-width,//新页面宽度,默认为100%
height:newpage-height,//新页面高度,默认为100%
......
},
extras:{
.....//自定义扩展参数,可以用来处理页面间传值
},
createNew:false,//是否重复创建同样id的webview,默认为false:不重复创建,直接显示
show:{
autoShow:true,//页面loaded事件发生后自动显示,默认为true
aniShow:animationType,//页面显示动画,默认为”slide-in-right“;
duration:animationTime//页面动画持续时间,Android平台默认100毫秒,iOS平台默认200毫秒;
},
waiting:{
autoShow:true,//自动显示等待框,默认为true
title:'正在加载...',//等待对话框上显示的提示内容
options:{
width:waiting-dialog-widht,//等待框背景区域宽度,默认根据内容自动计算合适宽度
height:waiting-dialog-height,//等待框背景区域高度,默认根据内容自动计算合适高度
......
}
}
})
2.初始化时,mui.init()创建子页面
也可能会遇到这样一种场景,顶部有titleBar,下面是动态列表,列表是需要滚动的,就是需要局部滚动,在android上会出现滚动不流畅的问题,
借用官网的一张图片
mui是这样解决的,将目标页面分解为主页面和内容页面,主页面显示卡头卡尾区域,比如顶部导航、底部选项卡等;内容页面显示具体需要滚动的内容,然后在主页面中调用mui.init方法初始化内容页面。
mui.init({
subpages:[{
url:your-subpage-url,//子页面HTML地址,支持本地地址和网络地址
id:your-subpage-id,//子页面标志
styles:{
top:subpage-top-position,//子页面顶部位置
bottom:subpage-bottom-position,//子页面底部位置
width:subpage-width,//子页面宽度,默认为100%
height:subpage-height,//子页面高度,默认为100%
......
},
extras:{}//额外扩展参数
}]
});
3.页面预加载
页面预加载技术就是在用户还没有触发页面跳转的时候,提前将目标页面创建出来,当用户跳转至目标页面时就可以立即进行页面跳转,没有创建页面的时间,使app更流畅
mui有两种页面预加载的方法
第一种就是在初始话页面的时候在init里面直接用参数preloadPages进行配置
mui.init({
preloadPages:[
{
url:prelaod-page-url,
id:preload-page-id,
styles:{},//窗口参数
extras:{},//自定义扩展参数
subpages:[{},{}]//预加载页面的子页面
}
],
preloadLimit:5//预加载窗口数量限制(一旦超出,先进先出)默认不限制
});
该种方案使用简单、可预加载多个页面,但不会返回预加载每个页面的引用,若要获得对应webview引用,还需要通过plus.webview.getWebviewById方式获得
第二种方式就是通过mui.preload方法预加载
var page = mui.preload({
url:new-page-url,
id:new-page-id,//默认使用当前页面的url作为id
styles:{},//窗口参数
extras:{}//自定义扩展参数
});
1.传递参数
无论是preload、init,还是openWindow方法想在页面之间的传值都需要通过extras自定义扩展参数进行数据的传递,比如说这样一个场景,新闻列表页面
点击进入新闻详情页面,需要新闻的newsId传入到新打开的页面,根据newsId进行页面渲染
在这里有一个坑需要注意一下,扩展参数只在打开新的窗口的时候有效,如果页面先经过预加载,然后通过openWindow方法打开的话,这个参数是无法传递的
2.自定义事件
有这么一个场景,列表页有一条数据,点击展开进入详情页,在详情页编辑之后回到列表页,列表页刷新展示新编辑的数据。back之后只会返回到列表页面,
但是返回之后只会返回到列表页,并不会刷新,这样就需要用到mui.fire()方法来自定义一个事件。具体如下
这是详情页面
// 获取列表页面
var list = plus.webview.getWebviewById('list');
//触发列表页面的自定义事件 reload
mui.fire(list, 'reload');
列表页面
//添加reload自定义事件监听
window.addEventListener('newsId',function(event){
// 执行页面刷新逻辑
});
1.mui.back
mui封装了窗口后退及关闭的方法,可以直接用mui.back()返回之前的窗口,而且back方法监听手机的back返回按键,自动执行返回逻辑,若是不想监听返回按键
可以使用一下方法禁止监听
mui.init({
keyEventBind: {
backbutton: false //关闭back按键监听
}
});
mui.back支持页面的右滑关闭。默认是未启用的。可以使用以下方法开启
mui.init({
swipeBack:true //启用右滑关闭功能
});
而且mui.back有一个beforeback参数,结合上面的fire方法可以封装一个返回刷新的逻辑,代码如下
mui.init({
beforeback: function() {
// 获取列表页面
var list = plus.webview.getWebviewById('list');
//触发列表页面的自定义事件 reload
mui.fire(list, 'reload');
// true 继续页面逻辑
return true;
}
});
2.mui.currentWebview.close()
mui.currentWebview.close方法可以直接关闭当前webview
本文纯手打,有不当之处请留言!希望能帮到小伙伴们,谢谢!