在用mui设计app总体框架时,基本需要实现点击底部选项卡切换页面的功能,在官方demo中对底部选项卡有几种选择,但是将demo复制过来时页面切换的效果并没有成功实现。本篇文章在demo的基础上进行修改,实现该效果。
- 定义一个subpages数组存放子页面id,设置子页面样式
var subpages = ['html/people.html', 'html/key.html', 'html/lock.html', 'html/signment.html', 'html/log.html'];
var subpage_style = {
top: '0px',
bottom: '51px'
};
- 创建子页面,显示首个选项卡页面,其余页面均隐藏
mui.plusReady(function() {
var self = plus.webview.currentWebview();
for (var i = 0; i < subpages.length; i++) {
var temp = {};
var sub = plus.webview.create(subpages[i], subpages[i], subpage_style);
if (i > 0) {
sub.hide();
} else {
temp[subpages[i]] = "true";
self.append(sub);
}
}
});
定义self来获取当前页面,从之前定义的数组中循环,选取第一个页面进行展示,其余页面利用hide()函数隐藏
- 激活当前选项
//当前激活选项
var activeTab = subpages[0];
var title = document.getElementById("title");
//选项卡点击事件
mui('.mui-bar-tab').on('tap', 'a', function(e) {
var targetTab = this.getAttribute('href');
if (targetTab == activeTab) {
return;
}
//更换标题
//title.innerHTML = this.querySelector('.mui-tab-label').innerHTML;
//显示目标选项卡
//若为iOS平台或非首次显示,则直接显示
if (mui.os.ios || aniShow[targetTab]) {
plus.webview.show(targetTab);
} else {
//否则,使用fade-in动画,且保存变量
var temp = {};
temp[targetTab] = "true";
mui.extend(aniShow, temp);
plus.webview.show(targetTab, "fade-in", 300);
}
//隐藏当前;
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');
}
});