MUI底部选项卡切换页面

底部选项卡的切换,可以说是APP的标志之一。 几乎主流的所有APP,都会在底部有多个选项卡,可以点击切换不同页面。而这个功能,MUI也很友好的给我们提供了两种方式:DIV模式和WebView模式。两种模式的显示效果差不多,如下图可见:

 

1两种模式的区别

 

顾名思义,DIV模式是将所有子页面的内容,分别放置到主页不同的DIV中,当我们点击主页的不同选项卡时,切换不同DIV的显示。 这种方式显然要比加载子页的方式快很多,但是也显然不能承载很多布局的页面,毕竟要在一个主页中写入所有子页面的代码,显得不太现实。

而WebView模式则是将所有子页面都写入到不同的子页面中,再通过主页连接到一起,点击不同的选项卡 ,加载不同的子页面,显然这种方式更符合我们的预期和要求。

 

2底部选项卡切换(DIV模式)

 

DIV模式的选项卡切换非常的简单,无需一行JS代码,直接使用HTML代码即可实现代码的切换:

        <header class="mui-bar mui-bar-nav">
            <a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
            <h1 class="mui-title">底部选项卡切换(Div模式)</h1>
        </header>
        
        <nav class="mui-bar mui-bar-tab">
            <a class="mui-tab-item mui-active" href="#page1">
                <span class="mui-icon mui-icon-home"></span>
                <span class="mui-tab-label">首页</span>
            </a>
            <a class="mui-tab-item" href="#page2">
                <span class="mui-icon mui-icon-phone"></span>
                <span class="mui-tab-label">电话</span>
            </a>
            <a class="mui-tab-item" href="#page3">
                <span class="mui-icon mui-icon-email"></span>
                <span class="mui-tab-label">邮件</span>
            </a>
            <a class="mui-tab-item" href="#page4">
                <span class="mui-icon mui-icon-gear"></span>
                <span class="mui-tab-label">设置</span>
            </a>
        </nav>
        
        
        <div class="mui-content">
            <div id="page1" class="mui-control-content mui-active">
                这是第一个页面
            </div>
            <div id="page2" class="mui-control-content">
                这是第二个页面
            </div>
            <div id="page3" class="mui-control-content">
                这是第三个页面
            </div>
            <div id="page4" class="mui-control-content">
                这是第四个页面
            </div>
        </div>

代码解释:

这种方式的实现,只需要给代表每个子页面的div,添加mui-control-content类即可,同时用mui-active表示默认加载的第一个子页。

写好子页DIV后,给每个div起一个id,并且将这个id与底部选项卡中的每个a标签的href属性相关联,即可实现选项卡的切换。

 

3底部选项卡切换(WebView模式)

 

使用WebView模式的选项卡切换,首先需要创建多个子页面的HTML文件,而主页中,只需要头部和尾部即可,其他功能交给JS操作:

        <header class="mui-bar mui-bar-nav">
            <a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
            <h1 class="mui-title" id="title">首页</h1>
        </header>
        
        <nav class="mui-bar mui-bar-tab">
            <a id="defaultTab" class="mui-tab-item mui-active" href="a.html">
                <span class="mui-icon mui-icon-home"></span>
                <span class="mui-tab-label">首页</span>
            </a>
            <a class="mui-tab-item" href="b.html">
                <span class="mui-icon mui-icon-email"></span>
                <span class="mui-tab-label">消息</span>
            </a>
            <a class="mui-tab-item" href="c.html">
                <span class="mui-icon mui-icon-contact"></span>
                <span class="mui-tab-label">通讯录</span>
            </a>
            <a class="mui-tab-item" href="d.html">
                <span class="mui-icon mui-icon-gear"></span>
                <span class="mui-tab-label">设置</span>
            </a>
        </nav>

HTML代码的简洁,必然造成JS代码的相对复杂,但是也很简单,大家使用粘贴复制大法即可:

        var subpages = ['a.html', 'b.html', 'c.html', 'd.html'];
        var subpage_style = {
            top: '45px',
            bottom: '51px'
        };
            
        var aniShow = {};
            
         //创建子页面,首个选项卡页面显示,其它均隐藏;
        mui.plusReady(function() {
            var self = plus.webview.currentWebview();
            for (var i = 0; i < 4; i++) {
                var temp = {};
                var sub = plus.webview.create(subpages[i], subpages[i], subpage_style);
                if (i > 0) {
                    sub.hide();
                }
            /* 让新创建的webview,追加合并到当前的窗口上。合并成一个窗口。
                * 目的:将父子窗口合并成一个页面,实现同开同关的效果。 避免点击返回安监室,子页面先关闭,而父页面的头部和尾部没有关闭的BUG。
             */
                self.append(sub);
            }
        });
         //当前激活选项
        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;
    });

每一行代码的详细作用,均已在代码注释中详细说明 ,但是对于很多新手同学,可能理解起来依然存在一定的问题,所以贴心的杰小瑞老师准备了极大程度的简化版本。

 

4底部选项卡切换(简化版)

 

上面的代码虽然功能强大,但是代码杂乱,很不容易理解,我们可以在保留原来的HTML的基础上,将JS代码进行极大程度的简化处理:

    mui.plusReady(function(){
    var pages = ["a.html","b.html","c.html","d.html"];
    var arr = document.getElementsByClassName("mui-tab-item")
    var styles = {
        top:"45px",
        bottom:"51px"
    }
    var pageArr = [];
    var slef = plus.webview.currentWebview();
    for(var i=0; i<arr.length; i++){
        // 有几个选项卡,需要创建几个子页面
        var page = plus.webview.create(pages[i],pages[i],styles);
        pageArr.push(page);
        !function(i){
            arr[i].addEventListener("tap",function(){
                // 让当前页面(i)显示,不是当前页面隐藏
                for(var j=0; j<pageArr.length; j++){
                    if(j!=i) pageArr[j].hide();
                    else pageArr[j].show();
                }
                /* 让新创建的webview,追加合并到当前的窗口上。合并成一个窗口。
                 * 目的:将父子窗口合并成一个页面,实现同开同关的效果。 避免点击返回安监室,子页面先关闭,而父页面的头部和尾部没有关闭的BUG。
                 */
                slef.append(pageArr[i]);
            })
        }(i);
    }
    // 默认触发第0个选项卡的tap事件。
    mui.trigger(arr[0],"tap");
});

 

怎么样,代码是不是简洁很多了呢?一起来看看最终效果吧!!

原文地址:https://www.cnblogs.com/jerehedu/p/9167369.html

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一款基于mui框架制作的选项卡切换和下拉刷新加载数据列表代码,手机移动端选项卡切换插件,触屏滑动下拉刷新代码。 js代码 [removed][removed] [removed][removed] [removed][removed] [removed] mui.init(); (function($) { //阻尼系数 var deceleration = mui.os.ios?0.003:0.0009; $('.mui-scroll-wrapper').scroll({ bounce: false, indicators: true, //是否显示滚动条 deceleration:deceleration }); $.ready(function() { //循环初始化所有下拉刷新,上拉加载。 $.each(document.querySelectorAll('.mui-slider-group .mui-scroll'), function(index, pullRefreshEl) { $(pullRefreshEl).pullToRefresh({ down: { callback: function() { var self = this; setTimeout(function() { var ul = self.element.querySelector('.mui-table-view'); ul.insertBefore(createFragment(ul, index, 10, true), ul.firstChild); self.endPullDownToRefresh(); }, 1000); } }, up: { callback: function() { var self = this; setTimeout(function() { var ul = self.element.querySelector('.mui-table-view'); ul.appendChild(createFragment(ul, index, 5)); self.endPullUpToRefresh(); }, 1000); } } }); }); var createFragment = function(ul, index, count, reverse) { var length = ul.querySelectorAll('li').length; var fragment = document.createDocumentFragment(); var li; for (var i = 0; i < count; i ) { li = document.createElement('li'); li.className = 'mui-table-view-cell'; li[removed] = '第' (index 1) '个选项卡子项-' (length (reverse ? (count - i) : (i 1))); fragment.appendChild(li); } return fragment; }; }); })(mui); [removed]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值