MUI实战之页面初始化与创建子页面对于新页面的实战心得

黎燃 发表于 2022/11/28 23:50:28 2022/11/28
【摘要】 页面初始化在应用程序开发中,如果你想使用HTML5+扩展api,你必须等待plusready事件发生后才能正常使用。MUI将事件封装到MUI中。plusReady()方法,它涉及HTML5+api。建议您将其写在mui中。plusReady方法。以下是打印当前页面URL的示例:mui.plusReady(function(){ console.log("当前页面URL:"+plus...

页面初始化

在应用程序开发中,如果你想使用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
    }
  });
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。