mui中子页面标志html,MUI 使用爬坑之路之 tab 多页面操做

版权声明:本文为 wintersmilesb101 -(我的独立博客– http://wintersmilesb101.online 欢迎访问)博主原创文章,未经博主容许不得转载。javascript

最近想入坑前端开发,也是为了开发 App 更快更接地气。在各类前端框架的纠结中我仍是决定先入坑 MUI ,开坑不易,欢迎交流。

OK,下面直接进入正题

咱们今天来试试制做网易云 App 的 UI,界面以下:

739874cdf29f4e999a6d3be8.html

那么就开始工做吧,首先下载 Hbulider,而后打开新建移动 App 选择 MUI 模板(不下载也能够,能够手动建立 MUI 项目,这里就再也不赘述)。

而后打开 index.html,在 body 标签中添加以下代码

其中咱们的侧滑栏能够直接经过联想代码块快速实现触发语句

“`html

moffcanvas前端

#### 其实你不用打完就会出现能够选择的代码块,对应的代码块都有做用解释,这样能够很快的选择到须要的代码块。上述代码有几个注意的地方:

##### 1.个人 header 标签后的第一个 a 标签有下移 10px 的样式,这是由于咱们要实现沉浸式(透明)状态栏,实现方法以下:

```html

ios:

打开应用的manifest.json文件,切换到代码视图,在plus -> distribute -> apple 下添加UIReserveStatusbarOffset节点并设置值为false。

注意:

1. 真机运行不生效,需提交App云端打包后才生效;

2. 此功能仅在iOS7及以上系统有效。

android:

打开应用的manifest.json文件,切换到代码视图,在plus -> distribute -> google 下添加ImmersedStatusbar节点并设置值为true。

注意:

1. 真机运行不生效,需提交App云端打包后才生效;

2. 此功能仅在Android4.4及以上系统有效。

配置系统状态栏样式

iOS平台可支持对系统状态栏样式的配置,在应用manifest.json文件的plus->distribute->apple下添加UIStatusBarStyle进行控制,默认值为"UIStatusBarStyleDefault"。

UIStatusBarStyleDefault 默认样式,iOS6及如下系统状态栏为黑底白字,iOS7及以上系统用于定义系统状态栏上文字颜色为黑字(适用于浅色背景)

UIStatusBarStyleBlackOpaque 深色背景色样式,iOS6及如下系统状态栏为黑底白字,iOS7及以上系统用于定义系统状态栏上文字颜色为白色(适用于深色背景)

UIStatusBarStyleBlackTranslucent iOS6及如下系统在启动界面为灰底白字,iOS7及以上系统与UIStatusBarStyleBlackOpaque效果同样

设置系统状态栏背景颜色(iOS7及以上生效)

iOS平台可支持对系统状态栏背景颜色的配置,在应用manifest.json文件的plus->distribute->apple下添加StatusBarBackground进行控制:

值为字符串类型,格式为"#RRGGBB"格式,如红色为"#FF0000";默认值为白色。

App云端打包设置系统状态栏背景颜色操做方式

双击应用的manifest.json文件,切换到“代码视图”,在apple节点下添加StatusBarBackground节点.

可是在设置了以后咱们的顶部栏会有与状态栏重叠的部分,因此这里就要向下移动必定距离

2.顶部 tab 标签的 style 样式(也就是代码中在 上一个问题的 a 标签以后的 div 标签)

这里是为了让咱们的样式与网易云音乐的顶部样式一致的作法,固然我这里尚未弄完,还存在边框的问题,可是本博客的重点不是这个,因此也就没太怎么弄了,其中添加的 ID 就是为了接下来的咱们的动态加载子页面中须要用到的。接下来就是重点:

在 MUI 中有一个建立子页面的方法

/*在mobile app开发过程当中,常常遇到卡头卡尾的页面,此时若使用局部滚动,在android手机上会出现滚动不流畅的问题; mui的解决思路是:将须要滚动的区域经过单独的webview实现,彻底使用原生滚动。具体作法则是:将目标页面分解为主页面和内容页面,主页面显示卡头卡尾区域,好比顶部导航、底部选项卡等;内容页面显示具体须要滚动的内容,而后在主页面中调用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:{}//额外扩展参数

}]});

/*参数说明:styles表示窗口属性,参考5+规范中的WebviewStyle;特别注意,height和width两个属性,即便不设置,也默认按100%计算;所以若设置了top值为非"0px"的状况,建议同时设置bottom值,不然5+ runtime根据高度100%计算,可能会形成页面真实底部位置超出屏幕范围的状况;left、right同理。*/

能够看到咱们能够经过上述方法建立子页面实现分页,可是这只是一个页面,那么要怎么实现多页面的切换呢?这里就要引入 H5 webView相关的操做了,关于 H5 webview 的相关 API 能够看这里 H5 webview API,咱们这里用到的是 getWebviewById,他会返回一个 WebviewObject窗口对象 咱们就在这个对象上作文章。下面来书写 JS 代码:

mui.plusReady(function(){

console.log("当前页面URL:"+plus.webview.currentWebview().getURL());

//给标签为 mine 的元素(也就是咱们的个人 tab )添加 tap 事件,这里因为 click 的延迟过高,故用 tap 事件。

document.getElementById("mine").addEventListener('tap',function(){

//获取到当前的 webview 根据标签也就是下面定义的子页面 id

var cur = plus.webview.getWebviewById("contentHtml");

//判断是不是此页面

if(cur.getURL()!="htmlFile/mine.html")

{

//不是就要切换页面为当前 tab 是指向的页面

console.log("显示个人");

cur.loadURL("htmlFile/mine.html")

}

});

document.getElementById("discory").addEventListener('tap',function(){

var cur = plus.webview.getWebviewById("contentHtml");

if(cur.getURL()!="htmlFile/discory.html")

{

console.log("显示个人");

cur.loadURL("htmlFile/discory.html")

}

});

document.getElementById("dynamic").addEventListener('tap',function(){

var cur = plus.webview.getWebviewById("contentHtml");

if(cur.getURL()!="htmlFile/dynamic.html")

{

console.log("显示个人");

cur.loadURL("htmlFile/dynamic.html")

}

});

});

//MUI 的初始化,添加子页面(默认页面是 “个人” 界面,这里的子页面 id 就要被用于之后 tab 点击事件中获取 webview 的 id,特别),

mui.init({

subpages:[

{

url:'htmlFile/mine.html',

id:'contentHtml',

styles:{

top:'55px'

}

}

]

});

对应的要注意的地方以及解释上面代码里已经说的很清楚了,至于其余的 3 个页面,我是另外写好的,大家也要写出页面,url 中填写大家要跳转的页面的地址就行了(网络地址或者本地地址),这里我就不说其余页面怎么创建了

运行以下,仔细看就能发现一个问题,咱们列表的最下面一项没有显示出来,也就是说页面没有彻底显示出来,

739874cdf29f4e999a6d3be8.html

解决方法:在建立子页面的时候咱们设置了top 的话就要也设置 bottom 否者会致使页面显示不彻底!(仔细看看前面官方文档就会发现,这就是不认真看文档的锅),下面修改 jS 代码:

mui.init({

subpages:[

{

url:'htmlFile/mine.html',

id:'contentHtml',

styles:{

top:'55px',

bottom:'0px'

}

}

]

});

而后保存,最好从新编译一次(这种更新不知道为何个人若是不从新编译就不会出现正确的效果),中止调试,再开始调试,结果以下( 多 tab 页面的实时切换就完成了):

739874cdf29f4e999a6d3be8.html

已知问题,侧边栏会被子页面覆盖,目前想法是经过 zindex 调整,可是试过无用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值