weex頁面自定義導(dǎo)航欄組件

參考:Weex系列(1)-App端自定義導(dǎo)航條
最近也在對(duì)weex項(xiàng)目做iOS適配工作玻淑,發(fā)現(xiàn)小伙伴們對(duì)于導(dǎo)航欄這塊都放在單個(gè)頁面單獨(dú)寫的淳附,只要有一個(gè)小問題嘱么,適配起來就比較蛋疼糠悯,于是將所有頁面的導(dǎo)航欄剝離處理統(tǒng)一處理甥雕,借鑒上述文章內(nèi)容做了一點(diǎn)小小的改動(dòng)優(yōu)化。
iOS除了新出的iPhone X導(dǎo)航條高度是88之外楞艾,其他設(shè)備都是64(我們的app最低支持iOS 9.0系統(tǒng))参咙,而安卓的統(tǒng)一是45龄广,所以先判斷平臺(tái)及設(shè)備硫眯。
weex屏幕默認(rèn)寬高是750 * 1334蕴侧,邏輯分辨率是375 * 667,導(dǎo)航條在css中設(shè)置的高度要乘以2
導(dǎo)航條的子控件有:左邊圖片两入、中間文字及右邊圖片或文字净宵。
左邊增加屬性判斷是返回按鈕(點(diǎn)擊執(zhí)行pop方法)或者其他按鈕

生成一個(gè)名叫 NavigationBar.vue 的文件 將下面的代碼貼入

<!--*******自定義導(dǎo)航條*******-->
<template>
    <div>
        <!--iPhoneX -->
        <div class="iPhoneXDiv navbar" v-if="isiPhoneX"></div>
        <!--其他iOS設(shè)備 -->
        <div class="iOSDiv navbar" v-else-if="isiOS"></div>
        <!--安卓設(shè)備 -->
        <div class="android navbar" v-else-if="isAndroid"></div>

        <div class="subviews">
            <!--Title-->
            <text class="titletext">{{titleText}}</text>
            <!--左邊圖片-->
            <div class="left" @click="leftButtonClicked" v-if="showLeft">
                <image :src="leftImage" class="left-button" :disabled="leftButtonDisabled"></image>
            </div>

            <div class="right-container" @click="rightButtonClicked" v-if="showRight">
                <!--如果顯示右邊item , 圖片或者文字 2選1 -->
                <text class="right-text" v-if="rightText">{{rightText}}</text>
                <image :src="rightImage" class="right-image" :style="{width:rightImageWidth + 'px', height:rightImageHeight + 'px'}" v-if="rightImage" :disabled="rightButtonDisabled"></image>
            </div>
        </div>
    </div>
</template>

<script>
    var device = weex.config.env;
    const Navigator = weex.requireModule('navigator');
    export default {
        /*props 屬性列表*/
        props: {
            /*返回圖片*/
            leftImage: {
                type: String,
                default: "local://icon_back.png"  //使用的本地資源圖片
            },
            /*Title*/

            titleText: {
                type: String,
                default: ""
            },
            /*是否顯示左邊圖片*/
            showLeft: {
                type: Boolean,
                default: true
            },
            /*showLeft=true時(shí),左邊是否是點(diǎn)擊返回事件裹纳,否择葡,則顯示其他圖片,重新給leftImage屬性賦值*/
            isBack: {
                type: Boolean,
                default: true
            },

            leftButtonDisabled: {
                type: Boolean,
                default: true
            },

            /*是否顯示右邊item*/
            showRight: {
                type: Boolean,
                default: false
            },
            /*右邊文字*/
            rightText: {
                type: String,
                default: ""
            },

            /*右邊圖片*/
            rightImage: {
                type: String,
                default: ""
            },

            rightImageWidth:{
                type:[Number, String],
                default:"38"
            },

            rightImageHeight:{
                type:[Number, String],
                default:"38"
            },

            rightButtonDisabled: {
                type: Boolean,
                default: true
            },
        },

        data() {
            return {
                isiPhoneX: (device.platform === 'iOS') && (device.deviceWidth === 1125) && (device.deviceHeight === 2436),
                isiOS: (device.platform === 'iOS'),
                isAndroid: (device.platform === 'android'),
                TitleText: "",
            }
        },

        methods: {
            //左邊點(diǎn)擊事件
            leftButtonClicked() {
                if (this.showLeft) {
                    console.log('LeftItemClicked');
                    this.$emit('LeftItemClicked');
                }
            },

            //右邊點(diǎn)擊事件
            rightButtonClicked() {
                if (this.showRight) {
                    console.log('RightItemClicked');
                    this.$emit('RightItemClicked');
                }
            },
        }
    };
</script>

<style scoped>
    /*導(dǎo)航條高度剃氧,預(yù)留90px敏储,X加上86即是(88*2=176),iOS其他設(shè)備增加38即是128*/
    .iPhoneXDiv {
        height: 88px;
    }
    .iOSDiv {
        height: 40px;
    }
    .android {
        height: 0px;
    }
    .navbar {
        width: 750px;
        top: 0px;
        left: 0px;
        background-color: #FBFBFD;
    }

    /*************************/
    /*大佈局樣式*/
    .subviews {
        height: 86px;
        width: 750px;
        left: 0px;
        background-color: #FBFBFD;
        border-bottom-color: #D9DDE3;
        border-bottom-width: 2px;
    }
    /*中間文字樣式*/
    .titletext {
        font-size: 36px;
        color: #2D2F3B;
        position: relative;
        width: 750px;
        height: 88px;
        text-align: center;
        line-height: 88px;
        bottom: 0;
    }
    /*左邊圖片*/
    .left {
        justify-content: center;
        position: absolute;
        align-items: center;
        flex: 1;
        height: 88px;
        left: 20px;
        bottom: 0px;
        width: 50px;
    }
    /*圖片按鈕*/
    .left-button {
        width: 22px;
        height: 36px;
    }
    /*右邊圖片*/
    .right-container {
        justify-content: center;
        position: absolute;
        align-items: center;
        flex: 1;
        height: 88px;
        right: 30px;
        bottom: 0px;
    }
    .right-image {
        width: 38px;
        height: 38px;
    }
    /*右邊文字*/
    .right-text {
        font-size: 32px;
        color: #1787F6;
    }
</style>

以上是內(nèi)容單獨(dú)卸載vue文件中如:NavigationBar.vue
在其它vue文件中使用的方法

<template>
    <div class="container">
        <!--導(dǎo)航條-->
            <div class="navbar">
                <!--顯示左邊圖片,右邊隱藏-->
                <NavBar
                        :show-left="true"
                        :is-back="true"
                        :title-text="title"
                        :show-right="true"
                        :right-image="rightImage"
                        :right-image-width="46"
                        :right-image-height="10"
                        @LeftItemClicked = "goback"
                        @RightItemClicked = "rightClick">
                </NavBar>
         </div>
    </div>
</template>

<script>
    /*引用自定義的導(dǎo)航條控件*/
    import NavBar from '../lbase/NavigationBar.vue';
    export default {
        components:{NavBar}, //設(shè)置組件
        data(){
            return{
                title:"設(shè)置",
            }
        },
        methods: {
           //點(diǎn)擊左邊按鈕事件
            goback: function () {
                //返回操作朋鞍,我們此處調(diào)用的時(shí)iOS原生方法
            },
            rightButtonClick: function() {
                //點(diǎn)擊右側(cè)按鈕操作
            },
        }
    };
</script>

<style scoped>
    .navbar{
        top: 0px;
        width: 750px;
    }
    .container{
        background-color: rgba(245,245,245,1);
    }
</style>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末已添,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子滥酥,更是在濱河造成了極大的恐慌更舞,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坎吻,死亡現(xiàn)場離奇詭異缆蝉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)瘦真,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門刊头,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人诸尽,你說我怎么就攤上這事原杂。” “怎么了弦讽?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵污尉,是天一觀的道長。 經(jīng)常有香客問我往产,道長被碗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任仿村,我火速辦了婚禮锐朴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蔼囊。我一直安慰自己焚志,他們只是感情好衣迷,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著酱酬,像睡著了一般壶谒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上膳沽,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天汗菜,我揣著相機(jī)與錄音,去河邊找鬼挑社。 笑死陨界,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的痛阻。 我是一名探鬼主播菌瘪,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼阱当!你這毒婦竟也來了俏扩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤斗这,失蹤者是張志新(化名)和其女友劉穎动猬,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體表箭,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赁咙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了免钻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片彼水。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖极舔,靈堂內(nèi)的尸體忽然破棺而出凤覆,到底是詐尸還是另有隱情,我是刑警寧澤拆魏,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布盯桦,位于F島的核電站,受9級(jí)特大地震影響渤刃,放射性物質(zhì)發(fā)生泄漏拥峦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一卖子、第九天 我趴在偏房一處隱蔽的房頂上張望略号。 院中可真熱鬧,春花似錦、人聲如沸玄柠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽羽利。三九已至宫患,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間铐伴,已是汗流浹背撮奏。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國打工俏讹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留当宴,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓泽疆,卻偏偏與公主長得像户矢,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子殉疼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1梯浪、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫組件 SD...
    陽明先生_X自主閱讀 15,969評(píng)論 3 119
  • 靈感好不容易來了,我可不會(huì)讓溜走瓢娜,所以抓緊寫下我想說的話挂洛。其實(shí)平時(shí)也會(huì)有感想,但是和我們遠(yuǎn)東沒多大關(guān)系眠砾,所以寫出來...
    郭大膽LYX閱讀 463評(píng)論 0 0
  • 是啊虏劲,你認(rèn)為一件小事,像燕劃過水面褒颈,水依舊無痕柒巫,簡子心里望著窗外在心里默念」韧瑁可是那年陽光正好的初夏堡掏,刺眼的陽光在簡...
    山河安閱讀 390評(píng)論 0 0