MUI实战之页面初始化与创建子页面对于新页面的实战心得
页面初始化
在应用程序开发中,如果你想使用HTML5+扩展api,你必须等待plusready事件发生后才能正常使用。MUI将事件封装到MUI中。plusReady()方法,它涉及HTML5+api。建议您将其写在mui中。plusReady方法。以下是打印当前页面URL的示例:
mui.plusReady(function(){
console.log("当前页面URL:"+plus.webview.currentWebview().getURL());
});

创建子页面
在移动应用程序开发过程中,常见的导航栏或选项卡经常出现。每次打开页面时,都需要重新渲染,很容易卡住。此时,如果使用部分滚动,Android手机将出现滚动不顺畅的问题;
mui现在提供两种解决方案:
第一个(官方推荐):在plus环境中,使用原生标题NView和原生选项卡栏替换页面的导航栏或选项卡。当页面打开时,渲染已完成,使您的应用程序更接近本机应用程序。具体方法:关于原生标题NView,请参阅mui的示例3。打开窗口;对于本机选项卡,请参阅ask教程的示例
第二种是通过双网络视图模式解决问题,这种模式适用于需要从上到下刷新的列表页面。要滚动的区域通过单独的Web视图实现,完全使用本地滚动。具体方法是:目标页面分为主页面和内容页面,主页面显示卡片头和卡片尾区域,如顶部导航、底部选项卡等;内容页面显示要滚动的特定内容,然后调用mui。初始化内容页。
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:{}//额外扩展参数
}]
});
参数说明:样式表示窗口属性。请参考5+规范中的WebviewStyle;请注意,默认情况下,高度和宽度属性按100%计算,即使它们未设置;因此,如果顶部值设置为“0px”以外的值,建议同时设置底部值。否则,5+运行时将基于100%的高度计算,这可能会导致页面的实际底部位置超出屏幕范围;左边和右边也是如此。
例如:梅艳芳的主页实际上是索引的组合。html和列表。html,如下所示:

指数html用于显示固定导航、列表。html显示特定的列表内容,列表项在列表中滚动。html所在的webview中使用本地滚动,这不仅确保滚动条不会穿透顶部导航,这符合应用程序的体验,还确保列表平滑滚动,解决了区域滚动堵塞的问题。列表html是index.html的子页面。创建代码相对简单,如下所示:
mui.init({
subpages:[{
url:'list.html',
id:'list.html',
styles:{
top:'45px',//mui标题栏默认高度为45px;
bottom:'0px'//默认为0px,可不定义;
}
}]
});
打开新页面
web应用程序中一个不可避免的问题是过渡动画;网络是建立在链接的基础上的。单击链接可从一个页面跳到另一个页面。如果您使用刷新方法打开它,用户将不得不等待空白页面;如果使用Javascript移动到DOM节点(一种常见的SPA解决方案)而不刷新,将遇到高性能挑战:DOM节点太多,页面太大,过渡动画不流畅,甚至浏览器崩溃;mui的解决方案是:单个webview只携带单个页面的dom,减少dom级别和页面大小;页面切换使用本机动画,最消耗性能的部分被移交给本机实现/
mui.openWindow({
url:new-page-url,
id:new-page-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,//等待框背景区域高度,默认根据内容自动计算合适高度
......
}
}
})
样式
窗口参数请参考5+规范中的WebviewStyle;请注意,默认情况下,高度和宽度属性按100%计算,即使它们未设置;因此,如果顶部值设置为“0px”以外的值,建议同时设置底部值。否则,5+运行时将基于100%的高度计算,这可能会导致页面的实际底部位置超出屏幕范围;左边和右边也是如此。
var webview = mui.openWindow({
url:'info.html',
extras:{
name:'mui' //扩展参数
}
});
console.log(webview.name);//输出mui字符串
Hello mui中,点击首页右上角的图标,会打开关于页面,实现代码如下:
//tap为mui封装的单击事件,可参考手势事件章节
document.getElementById('info').addEventListener('tap', function() {
//打开关于页面
mui.openWindow({
url: 'examples/info.html',
id:'info'
});
});
因为没有传入样式参数,所以默认全屏显示;没有传入show参数,因此使用右侧动画中的幻灯片,新页面从右侧滑入。
示例2:从页面A打开页面B,页面B是需要从服务器加载的列表页面。如果发生页面B加载事件,将显示该事件。由于服务器数据尚未完全加载,列表页面为空,用户体验差;用户体验可以通过以下方法来改善(最好的用户体验应该预先加载):步骤1:页面B的加载事件发生后,不会自动显示;
//A页面中打开B页面,设置show的autoShow为false,则B页面在其loaded事件发生后,不会自动显示;
mui.openWindow({
url: 'B.html',
show:{
autoShow:false
}
});
- 点赞
- 收藏
- 关注作者
评论(0)