webapp mui & HTML5+ (四) 之 窗口(页面初始化、跳转、传参)
2017-12-08 11:49
651 查看
在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
本文纯手打,有不当之处请留言!希望能帮到小伙伴们,谢谢!
相关文章推荐
- MUI框架开发HTML5手机APP(二)--页面跳转传值&底部选项卡切换
- webapp mui & HTML5+ (三) 之 mui开发注意事项
- webapp mui & HTML5+ (二) 之 mui
- webapp mui & HTML5+ (一) 之 环境
- js页面跳转 和 js打开新窗口 方法
- android web页面点击事件跳转至APP
- WebApp mui&H5+ 视频处理之拍摄
- <Web>HTML中设置欢迎页面自动跳转
- mui开发APP教程之使用选项卡跳转子页面
- web开发之制作页面弹出窗口(url传参提交)
- phonegap(cordova)从手机app跳转到web页面在跳转回APP本地页面思路
- Mobile&nbsp;Web&nbsp;App一个页面的简单的东…
- WebApp mui&H5+ 视频处理之拍摄视频二(Native.js for Android)
- iOS实现在webview页面内点击链接,跳转指定App
- reactwebAPP的各个页面之间的跳转以及footer相对应!
- 移动App开发 MUI框架 利用软键盘的搜索键实现页面跳转并传值
- html5页面中打开本地app,如果没有跳转下载页面的解决方案
- WebApp mui&H5+ 视频处理之拍摄视频一(Native.js for Android)
- mui页面传参 页面跳转事件委托
- mui app页面刷新问题 plus.webview.getWebviewById("").reload()