成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

MUI框架開發(fā)HTML5手機(jī)APP(二)--頁面跳轉(zhuǎn)傳值&底部選項(xiàng)卡切換

番茄西紅柿 / 3226人閱讀

摘要:三底部選項(xiàng)卡切換頁面底部選項(xiàng)卡的切換,可以說是的標(biāo)志之一。兩種模式的顯示效果差不多,如下圖可見兩種模式的區(qū)別顧名思義,模式是將所有子頁面的內(nèi)容,分別放置到主頁不同的中,當(dāng)我們點(diǎn)擊主頁的不同選項(xiàng)卡時(shí),切換不同的顯示。

  概 述

JRedu

  在上一篇博客中,我們學(xué)習(xí)了如何使用Hbuilder創(chuàng)建一個(gè)APP,同時(shí)如何使用MUI搭建屬于自己的第一款A(yù)PP,沒有學(xué)習(xí)的同學(xué)可以戳鏈接學(xué)習(xí): http://www.cnblogs.com/jerehedu/p/7832808.html  

  今天這篇博客,我們繼續(xù)深入學(xué)習(xí)MUI框架,主要學(xué)習(xí)這幾個(gè)方面:加載子頁面、頁面跳轉(zhuǎn)并傳值,底部選項(xiàng)卡的多種實(shí)現(xiàn)方式。


一、MUI加載子頁面

 

1加載子頁面詳解

在mobile app開發(fā)過程中,經(jīng)常遇到卡頭卡尾的頁面,也就是說頭部和尾部保持不動(dòng),而只有中間區(qū)域可以滾動(dòng),常見的就是新聞列表與詳情頁等情況:

如上圖所示,頭部和尾部不會(huì)跟著滾動(dòng),而是只有中間列表區(qū)域正常滾動(dòng)。但這種局部滾動(dòng),在android手機(jī)上會(huì)出現(xiàn)滾動(dòng)不流暢的問題;

針對(duì)這個(gè)問題,mui的解決思路是:將需要滾動(dòng)的區(qū)域通過多帶帶的webview實(shí)現(xiàn),完全使用原生滾動(dòng)。也就是說,將頁面分為主頁面和子頁面兩部分,主頁面只有頭部和尾部,而需要滾動(dòng)的區(qū)域放置到子頁面中,并在mui.init()方法中加載。大約就是這么一個(gè)效果:

 

 

 

2加載子頁面的實(shí)現(xiàn)

在上篇博客中,我們介紹了mui.init()方法,這個(gè)方法主要用于mui頁面的初始化,進(jìn)行頁面加載時(shí)的各種配置,接受一個(gè)對(duì)象類型的參數(shù)。

那么,在mui中加載子頁面非常簡(jiǎn)單,只需要對(duì)象中傳入subpages屬性,用數(shù)組格式表示多個(gè)頁面,subpages數(shù)組的格式要求如下:

mui.init({
    subpages:[{
      url:your-subpage-url,//子頁面HTML地址,支持本地地址和網(wǎng)絡(luò)地址
      id:your-subpage-id,//子頁面標(biāo)志
      styles:{
        top:subpage-top-position,//子頁面頂部位置
        bottom:subpage-bottom-position,//子頁面底部位置
        width:subpage-width,//子頁面寬度,默認(rèn)為100%
        height:subpage-height,//子頁面高度,默認(rèn)為100%
        ......
      },
      extras:{}//額外擴(kuò)展參數(shù)
    }]
  });

具體的實(shí)現(xiàn)步驟如下:

① 新建主頁面,只保留頭部和尾部

主頁面中輸入mHeader、mfooter即可快速生成頭尾

        <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">在主頁面中加載子頁面h1>
        header>
        
        
        <nav class="mui-bar mui-bar-tab">
            <a class="mui-tab-item mui-active">
                <span class="mui-icon mui-icon-home">span>
                <span class="mui-tab-label">首頁span>
            a>
            <a class="mui-tab-item">
                <span class="mui-icon mui-icon-phone">span>
                <span class="mui-tab-label">電話span>
            a>
            <a class="mui-tab-item">
                <span class="mui-icon mui-icon-email">span>
                <span class="mui-tab-label">郵件span>
            a>
            <a class="mui-tab-item">
                <span class="mui-icon mui-icon-gear">span>
                <span class="mui-tab-label">設(shè)置span>
            a>
        nav>

② 新建子頁面,承載一個(gè)列表頁

子頁面中輸入mList,即可快速生成一個(gè)列表頁面。注意子頁面中無需頭部尾部,也無需將內(nèi)容包裹在mBody中。

        <ul class="mui-table-view">
            <li class="mui-table-view-cell">
                <a class="mui-navigate-right">
                    Item 1
                a>
            li>
            <li class="mui-table-view-cell">
                <a class="mui-navigate-right">
                     Item 2
                a>
            li>
            。。。。。。
        ul>

③ 主頁面的mui.init()方法中加載子頁面

mui.init({
    /* 在頁面的指定位置,加載子頁面,實(shí)現(xiàn)卡頭卡尾的效果 */
    subpages:[{
      url:"0101-ziye.html",//子頁面HTML地址,支持本地地址和網(wǎng)絡(luò)地址
      id:"0101-ziye.html",//子頁面標(biāo)志
      styles:{
        top:"45px",//子頁面頂部位置(頂部選項(xiàng)卡默認(rèn)高度45px)
        bottom:"51px",//子頁面底部位置(頂部導(dǎo)航欄默認(rèn)高度51px)
        //width:100%,//子頁面寬度,默認(rèn)為100%
        //height:100%,//子頁面高度,默認(rèn)為100%
      },
//    extras:{}//額外擴(kuò)展參數(shù),頁面?zhèn)髦禃r(shí)使用
    }]
})

上述配置代碼的詳細(xì)解釋已經(jīng)在注釋中說明,大家按照注釋內(nèi)容配置即可,其中extras:{}用于頁面間傳值使用,下個(gè)章節(jié)講解。

 

二、 頁面間跳轉(zhuǎn)并傳值

 

1頁面間跳轉(zhuǎn)傳值概述

在移動(dòng)APP中,頁面之間的跳轉(zhuǎn)傳值是非常常用的,一種典型的應(yīng)用就是從新聞列表頁點(diǎn)擊每一條新聞,將新聞的id傳遞到詳情頁顯示,例如下述情況:

在這里需要強(qiáng)調(diào)一下,雖然我們使用MUI制作的APP也是有網(wǎng)頁組成,但是頁面之間跳轉(zhuǎn)盡量不要使用超鏈接標(biāo)簽進(jìn)行跳轉(zhuǎn),MUI給我們提供了更加好用而且性能更優(yōu)的方式:mui.openWindow(),這個(gè)函數(shù)我們?cè)谏掀┛椭幸呀?jīng)使用過,此處不再贅述。

但是從效果圖可以看到,我們從列表頁跳轉(zhuǎn)到詳情頁時(shí),標(biāo)題上面的內(nèi)容也在發(fā)生著變化,那么我們就需要用到另一個(gè)函數(shù):mui.openWindowWithTitle(),這個(gè)方法是對(duì)mui.openWindow()的擴(kuò)展,支持nativeObj繪制標(biāo)題欄,加快頁面展現(xiàn)。

 

2mui.openWindowWithTitle()介紹

 

這個(gè)函數(shù)是對(duì)mui.openWindow()的擴(kuò)展,因此mui.openWindow()方法需要配置的參數(shù),在這個(gè)方法中依然支持,同時(shí)這個(gè)方法要求傳入一個(gè)新對(duì)象,表示對(duì)標(biāo)題欄的配置:

mui.openWindowWithTitle({
        // mui.openWindow()方法的各種配置項(xiàng),依然寫在這里
},{
    title:{//標(biāo)題配置
        text:"",//標(biāo)題文字
    },
    back:{//左上角返回箭頭
        image:{//圖片格式
            base64Data://加載圖片的Base64編碼格式數(shù)據(jù) base64Data 和 imgSRC 必須指定一個(gè).否則不顯示返回箭頭
        }
    }
})

 

3列表頁打開詳情頁,并傳值

 

要實(shí)現(xiàn)頁面之間的跳轉(zhuǎn)傳值,首先要為列表頁的所有l(wèi)ist添加點(diǎn)擊事件,并獲取到每個(gè)list的id,同時(shí)將ID傳入到詳情頁。 當(dāng)然,這些操作都需要在mui.plusReady方法中寫入:

mui.plusReady(function(){
    var arr = document.getElementsByTagName("a");
for(var i=0; i){
    !function(i){
        arr[i].addEventListener("tap",function(){
            mui.openWindowWithTitle({
                url:"0102-detail.html",
                id:"0102-detail.html",
                styles:{
                },
                extras:{
                    // 打開頁面的同時(shí),向新頁面?zhèn)鬟f數(shù)據(jù)。
                    newsId : i
                }
            },{
                //標(biāo)題欄的背景色和底邊線配置
                backgroundColor:"#C9302C",
                //bottomBorderColor:"#00ff00",
                title:{
                    //標(biāo)題文字的內(nèi)容和樣式配置
                    text:"新聞詳情"+(i+1),
                    styles:{
                        color:"#FFFFFF",
                        align:"center",
                        family:"Helvetica Neue,Helvetica,sans-serif",
                        size:"20px",
                        style:"normal",
                        weight:"bold",
                    }
                },
                back:{
                    image:{
                /*返回箭頭圖片可以使用imgSrc,也可以使用base64編碼*/
                        //imgSrc:"img/back.png"
                        base64Data:"data:image/png;base64,……"
                    }
                }
            })
        })
    }(i);
}
});    

這里面,除了mui.openWindowWithTitle()之外,還有一個(gè)重要的代碼:

extras:{
    // 打開頁面的同時(shí),向新頁面?zhèn)鬟f數(shù)據(jù)。
    newsId : i
}

這就是頁面之間傳值的關(guān)鍵所在,使用extras對(duì)象,將我們需要傳遞給新頁面的數(shù)據(jù)以鍵值對(duì)的形式送達(dá)。

  

4詳情頁接受列表頁傳值

 

當(dāng)列表頁當(dāng)id傳給詳情頁以后,詳情頁接受就很簡(jiǎn)單了,只需要先取到當(dāng)前詳情頁的WebView,并從當(dāng)前WebView中取到傳過來的newsId:

mui.plusReady(function(){
    // 取到當(dāng)前的webview
    //var slef = plus.webview.currentWebview();
    
    // 通過webview的id,獲取指定的webview
    var slef = plus.webview.getWebviewById("0102-detail.html");
    
    document.getElementById("num").innerText = slef.newsId+1;
})

上述代碼可以看到,取到當(dāng)前WebView的方式有兩種,一種是直接取到當(dāng)前WebView,一種是使用WebView的id獲得指定的WebView。 不管哪種方式取到,拿到WebView以后,就可以直接以鍵取值。

 

三、底部選項(xiàng)卡切換頁面

 

底部選項(xiàng)卡的切換,可以說是APP的標(biāo)志之一。 幾乎主流的所有APP,都會(huì)在底部有多個(gè)選項(xiàng)卡,可以點(diǎn)擊切換不同頁面。而這個(gè)功能,MUI也很友好的給我們提供了兩種方式:DIV模式和WebView模式。兩種模式的顯示效果差不多,如下圖可見:

 

1兩種模式的區(qū)別

 

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

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

 

2底部選項(xiàng)卡切換(DIV模式)

 

DIV模式的選項(xiàng)卡切換非常的簡(jiǎn)單,無需一行JS代碼,直接使用HTML代碼即可實(shí)現(xiàn)代碼的切換:

        <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">底部選項(xiàng)卡切換(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">設(shè)置span>
            a>
        nav>
        
        
        <div class="mui-content">
            <div id="page1" class="mui-control-content mui-active">
                這是第一個(gè)頁面
            div>
            <div id="page2" class="mui-control-content">
                這是第二個(gè)頁面
            div>
            <div id="page3" class="mui-control-content">
                這是第三個(gè)頁面
            div>
            <div id="page4" class="mui-control-content">
                這是第四個(gè)頁面
            div>
        div>

代碼解釋:

這種方式的實(shí)現(xiàn),只需要給代表每個(gè)子頁面的div,添加mui-control-content類即可,同時(shí)用mui-active表示默認(rèn)加載的第一個(gè)子頁。

寫好子頁DIV后,給每個(gè)div起一個(gè)id,并且將這個(gè)id與底部選項(xiàng)卡中的每個(gè)a標(biāo)簽的href屬性相關(guān)聯(lián),即可實(shí)現(xiàn)選項(xiàng)卡的切換。

 

3底部選項(xiàng)卡切換(WebView模式)

 

使用WebView模式的選項(xiàng)卡切換,首先需要?jiǎng)?chuàng)建多個(gè)子頁面的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">設(shè)置span>
            a>
        nav>

HTML代碼的簡(jiǎn)潔,必然造成JS代碼的相對(duì)復(fù)雜,但是也很簡(jiǎn)單,大家使用粘貼復(fù)制大法即可:

        var subpages = [a.html, b.html, c.html, d.html];
        var subpage_style = {
            top: 45px,
            bottom: 51px
        };
            
        var aniShow = {};
            
         //創(chuàng)建子頁面,首個(gè)選項(xiàng)卡頁面顯示,其它均隱藏;
        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();
                }
            /* 讓新創(chuàng)建的webview,追加合并到當(dāng)前的窗口上。合并成一個(gè)窗口。
                * 目的:將父子窗口合并成一個(gè)頁面,實(shí)現(xiàn)同開同關(guān)的效果。 避免點(diǎn)擊返回安監(jiān)室,子頁面先關(guān)閉,而父頁面的頭部和尾部沒有關(guān)閉的BUG。
             */
                self.append(sub);
            }
        });
         //當(dāng)前激活選項(xiàng)
        var activeTab = subpages[0];
        var title = document.getElementById("title");
        //選項(xiàng)卡點(diǎn)擊事件
        mui(.mui-bar-tab).on(tap, a, function(e) {
            var targetTab = this.getAttribute(href);
                
            if (targetTab == activeTab) {
                return;
            }
            //更換標(biāo)題
            title.innerHTML = this.querySelector(.mui-tab-label).innerHTML;
            //顯示目標(biāo)選項(xiàng)卡
            //若為iOS平臺(tái)或非首次顯示,則直接顯示
            if(mui.os.ios||aniShow[targetTab]){
                plus.webview.show(targetTab);
            }else{
                //否則,使用fade-in動(dòng)畫,且保存變量
                var temp = {};
                temp[targetTab] = "true";
                mui.extend(aniShow,temp);
                plus.webview.show(targetTab,"fade-in",300);
            }
            //隱藏當(dāng)前;
            plus.webview.hide(activeTab);
            //更改當(dāng)前活躍的選項(xiàng)卡
            activeTab = targetTab;
    });

每一行代碼的詳細(xì)作用,均已在代碼注釋中詳細(xì)說明 ,但是對(duì)于很多新手同學(xué),可能理解起來依然存在一定的問題,所以貼心的杰小瑞老師準(zhǔn)備了極大程度的簡(jiǎn)化版本。

 

4底部選項(xiàng)卡切換(杰小瑞老師簡(jiǎn)化版)

 

上面的代碼雖然功能強(qiáng)大,但是代碼雜亂,很不容易理解,我們可以在保留原來的HTML的基礎(chǔ)上,將JS代碼進(jìn)行極大程度的簡(jiǎn)化處理:

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){
        // 有幾個(gè)選項(xiàng)卡,需要?jiǎng)?chuàng)建幾個(gè)子頁面
        var page = plus.webview.create(pages[i],pages[i],styles);
        pageArr.push(page);
        !function(i){
            arr[i].addEventListener("tap",function(){
                // 讓當(dāng)前頁面(i)顯示,不是當(dāng)前頁面隱藏
                for(var j=0; j){
                    if(j!=i) pageArr[j].hide();
                    else pageArr[j].show();
                }
                /* 讓新創(chuàng)建的webview,追加合并到當(dāng)前的窗口上。合并成一個(gè)窗口。
                 * 目的:將父子窗口合并成一個(gè)頁面,實(shí)現(xiàn)同開同關(guān)的效果。 避免點(diǎn)擊返回安監(jiān)室,子頁面先關(guān)閉,而父頁面的頭部和尾部沒有關(guān)閉的BUG。
                 */
                slef.append(pageArr[i]);
            })
        }(i);
    }
    // 默認(rèn)觸發(fā)第0個(gè)選項(xiàng)卡的tap事件。
    mui.trigger(arr[0],"tap");
});

 

怎么樣,代碼是不是簡(jiǎn)潔很多了呢?一起來看看最終效果吧??!

 

  好了,今天的內(nèi)容就先到這了,下篇博客讓我們繼續(xù)探討MUI的更高級(jí)功能吧!由于博客描述有限,使用過程中有任何問題,歡迎評(píng)論留言討論哦~~

  

  如果需要源碼,請(qǐng)點(diǎn)擊下載鏈接進(jìn)行下載。

 

作者:杰瑞教育
出處:http://www.cnblogs.com/jerehedu/ 
版權(quán)聲明:本文版權(quán)歸臺(tái)杰瑞教育技有限公司和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。
技術(shù)咨詢:

 

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/2118.html

相關(guān)文章

  • MUI使用總結(jié)

    摘要:預(yù)加載自定義事件第三方擴(kuò)展插件涉及的,除了,其它所有手機(jī)瀏覽器及瀏覽器均無法使用,目前主要包括語音輸入事件相關(guān)注意瀏覽器沒有事件事件相關(guān)的,手機(jī)端瀏覽器均可使用端模擬手機(jī)瀏覽器也可以正常使用。 最近項(xiàng)目中需要使用MUI做一個(gè)視頻播放的小功能。我就花時(shí)間研究了一下MUI。 MUI是一個(gè)使用JavaScript開發(fā)Android和IOS應(yīng)用的前端框架。這篇文章將以知識(shí)樹的形式對(duì)MUI的使用...

    elliott_hu 評(píng)論0 收藏0
  • [MUI] mui框架實(shí)現(xiàn)頁面傳值

    摘要:參考通過本地儲(chǔ)存特性檢測(cè)參考利用傳參在頁面跳轉(zhuǎn)的時(shí)候通過設(shè)置添加參數(shù),在接收參數(shù)的頁面通過獲取參數(shù)字符串。發(fā)送參數(shù)的頁面接收參數(shù)的頁面獲取中的參數(shù)獲取中的參數(shù)其他參考資料頁面?zhèn)鲄⒔K極版青峰專欄博客頻道本文地址 1 : 通過MUI封裝的openWindow 方法: mui.openWindow({ url:new-page-url, id:new-page-id, ...

    劉永祥 評(píng)論0 收藏0
  • [MUI] mui框架實(shí)現(xiàn)頁面傳值

    摘要:參考通過本地儲(chǔ)存特性檢測(cè)參考利用傳參在頁面跳轉(zhuǎn)的時(shí)候通過設(shè)置添加參數(shù),在接收參數(shù)的頁面通過獲取參數(shù)字符串。發(fā)送參數(shù)的頁面接收參數(shù)的頁面獲取中的參數(shù)獲取中的參數(shù)其他參考資料頁面?zhèn)鲄⒔K極版青峰專欄博客頻道本文地址 1 : 通過MUI封裝的openWindow 方法: mui.openWindow({ url:new-page-url, id:new-page-id, ...

    The question 評(píng)論0 收藏0
  • [MUI] mui框架實(shí)現(xiàn)頁面傳值

    摘要:參考通過本地儲(chǔ)存特性檢測(cè)參考利用傳參在頁面跳轉(zhuǎn)的時(shí)候通過設(shè)置添加參數(shù),在接收參數(shù)的頁面通過獲取參數(shù)字符串。發(fā)送參數(shù)的頁面接收參數(shù)的頁面獲取中的參數(shù)獲取中的參數(shù)其他參考資料頁面?zhèn)鲄⒔K極版青峰專欄博客頻道本文地址 1 : 通過MUI封裝的openWindow 方法: mui.openWindow({ url:new-page-url, id:new-page-id, ...

    galois 評(píng)論0 收藏0
  • ?基于H5+js開發(fā)一款音樂播放器

    前言:當(dāng)下音樂播放器不勝其數(shù),為了更好的掌握一些東西,我們來自己制作一個(gè)音樂播放器。 文章目錄: 一.開發(fā)環(huán)境:二.頁面視圖:1.主文件入口(首頁):2.音樂播放界面: 三.功能實(shí)現(xiàn)(1)、index.html:(2)、播放音樂(music.html):(3)、樣式文件(index.css): 四.項(xiàng)目地址: 一.開發(fā)環(huán)境: 開發(fā)工具:HbuliderX; 框架:Vant,Mui,V...

    BearyChat 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<