本篇笔记主要分享mui框架下底部导航菜单的切换。其实关于底部导航菜单的切换在网上有很多教程。那么波波为啥还要再分享一下呢?原因其实很简单,别人分享的不好用。
首先我们看mui底部导航的html部分代码,大家也可以用mT来一键生成(仅hbuilder中有效)。
- <nav class="mui-bar mui-bar-tab">
- <a class="mui-tab-item mui-active" href="index.html" target="_self">
- <span class="mui-icon mui-icon-home"></span>
- <span class="mui-tab-label">首页</span>
- </a>
- <a class="mui-tab-item" href="square.html" target="_self">
- <span class="mui-icon iconfont iconfenleiorguangchangorqita"></span>
- <span class="mui-tab-label">广场</span>
- </a>
- <a class="mui-tab-item" href="reading.html" target="_self">
- <span class="mui-icon iconfont icontushu"></span>
- <span class="mui-tab-label">读书</span>
- </a>
- <a class="mui-tab-item" href="ucenter.html" target="_self">
- <span class="mui-icon iconfont iconyonghu"></span>
- <span class="mui-tab-label">我的</span>
- </a>
- </nav>
第一种方法,也是网上大家采用较多的webview这种方式可以在生成APP时达到很好的切换效果,但是不足之处是普通浏览器无法使用,如果再单独去做兼容,代码冗余较多。
- //创建子页面
- var subpages = ['index.html','square.html','reading.html','ucenter.html'];
- var subpage_style = {
- top: '0px',
- bottom: '50px',
- scrollIndicator: "none" ,// 当你的界面的内容足够多的时候,会出现滚动条,这个是隐藏滚动条
- };
- //创建子页面,首个选项卡页面显示,其它均隐藏;
- mui.plusReady(function(){
- //获得当前页面
- var self = plus.webview.currentWebview();
- //循环创建子页面
- for(var i=0;i<subpages.length;i++){
- var sub = plus.webview.create(subpages[i],subpages[i],subpage_style);
- var sub = plus.webview.create(
- 'a.html',
- 'a.html',{
- top: '0px',
- bottom: '50px',
- scrollIndicator: "none" ,// 当你的界面的内容足够多的时候,会出现滚动条,这个是隐藏滚动条
- });
- if(i>0){
- sub.hide();
- }
- self.append(sub);
- }
- });
- //当前激活选项卡
- var activeTab = subpages[0];
- //选项卡点击事件
- mui('.mui-bar-tab').on('tap', 'a', function(e) {
- var targetTab = this.getAttribute('href');
- if (targetTab == activeTab) {
- return;
- }
- //显示目标选项卡
- plus.webview.show(targetTab);
- //隐藏当前;
- plus.webview.hide(activeTab);
- //更改当前活跃的选项卡
- activeTab = targetTab;
- });
- //自定义事件,模拟点击“首页选项卡”
- document.addEventListener('gohome',function () {
- var defaultTab = document.getElementById("defaultTab");
- //模拟首页点击
- mui.trigger(defaultTab,'tap');
- //切换选项卡高亮
- var current = document.querySelector(".mui-bar-tab>.mui-tab-item.mui-active");
- if(defaultTab!==current){
- current.classList.remove('mui-active');
- defaultTab.classList.add('mui-active');
- }
- });
第二种方法。原生写法,兼容多端。这也是波波本篇笔记分享的重点。优点是代码简洁,兼容性好,缺点是页面切换时如果涉及外部加载,则会出现白屏现象。
- mui('.mui-bar-tab').on('tap','a',function(e){
- var targetTab = this.getAttribute('href');
- mui.openWindow(targetTab);
- })
好了,本篇笔记就分享这么多,有其他更优解决方案的朋友也欢迎留言。