mui底部選項卡切換頁面的兩種模式


最近接觸前端的MUI框架,涉及到底部選項卡切換的過程中有點糾結,趁着晚上總結一下:

 

MUI底部選項卡Demo展示:

http://www.dcloud.io/hellomui/

一共涉及到兩種模式:DIV模式和WebView模式

顧名思義,DIV模式是將所有子頁面的內容,分別放置到主頁不同的DIV中,當我們點擊主頁的不同選項卡時,切換不同DIV的顯示。 這種方式顯然要比加載子頁的方式快很多,但是也顯然不能承載很多布局的頁面,畢竟要在一個主頁中寫入所有子頁面的代碼,顯得不太現實。

而WebView模式則是將所有子頁面都寫入到不同的子頁面中,再通過主頁連接到一起,點擊不同的選項卡 ,加載不同的子頁面,顯然這種方式更符合我們的預期和要求。

但在實際開發實現過程中發現似乎所謂的WebView模式按鈕點擊是需要每次加載url,而DIV模式點擊時是不重新加載原url?這一點后續有待驗證

1.DIV模式

<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>

以上代碼已能實現選項卡的切換,但是針對不同詳情頁返回不同的頁簽的場景,還需要以下js:

    if(getQueryString("k")== 1){
        $("#hometab").addClass("mui-active");
        $("#home").addClass("mui-active");
    }
    else if(getQueryString("k")== 2){
        $("#worktab").addClass("mui-active");
        $("#work").addClass("mui-active");
    }
    else if(getQueryString("k")== 3){
        $("#persontab").addClass("mui-active");
        $("#person").addClass("mui-active");
    }

針對不同詳情頁設置頁面跳轉:goHome()

function goHome(k) {
    //window.location.replace(appPath + 'template/page/main/work.jsp');
    k = k || 2;
    if(k == 1){
        window.location.replace(appPath + 'template/page/main/homes.jsp?k=1');
    }    
    else if(k == 2){
        window.location.replace(appPath + 'template/page/main/homes.jsp?k=2');
    }
    else if(k == 3){
        window.location.replace(appPath + 'template/page/main/homes.jsp?k=3');
    

div模式下切換選項卡的核心內容在於將所選中的div容器的class加入mui-active屬性,

在url中加入k參數,使其通過參數k判斷要跳轉至哪一個選項卡。

2.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">底部選項卡切換(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>

JS代碼:

//設置底部選項卡頁面跳轉,元素不選mui('body') 避免與注銷按鈕沖突
            mui('.mui-bar').on('tap','a',function(){
                  window.top.location.href=this.href;
           });
        
            mui.init();
            //創建子頁面
            var subpages = ['home.jsp','work.jsp','person.jsp'];
            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(
                        'home.jsp',
                        'home.jsp',{
                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');
                }
            });

注:html部分的代碼是網上粘貼得來(實際項目的頁面過於冗長又懶得手打),所以部分jsp頁面名稱對不上,讀者自行修改,但實現的關鍵在於js部分。

 

部分內容來自https://www.cnblogs.com/jerehedu/p/9167369.html  感謝大佬分享。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM