1. 程式人生 > 程式設計 >如何用uni-app實現頂部導航欄顯示按鈕和搜尋框

如何用uni-app實現頂部導航欄顯示按鈕和搜尋框

最近公司準備做app,最終決定使用uni-app框架開發,但是當把設計圖給我的時候我心裡有點沒底,因為他的設計圖頂部長成這個樣子:

如何用uni-app實現頂部導航欄顯示按鈕和搜尋框

因為這個功能在小程式是根本無法實現的,可能受這個影響,我感覺好像實現不了,但是我還是回頭看了看文件,才發現,這個功能是可以實現的,只需要在pages.json中做一些配置即可

這個在官方稱作app-plus,可以自定義導航區域,具體配置如下:

"pages": [
        {
            "path": "pages/index/index","style": {
                "navigationBarBackgroundColor": "#00c170","app-plus": {
                    "bounce": "none","titleNView": {
                        "buttons": [ 
                            {
                                "text": "地圖","fontSize":"16","float": "right","color":"#fff"
        HQTEqdSp
},{ "text": "唐山","float": "left","color":"#fff" } ],"searchInput":{ "align": "center","placeholder": "請輸入查詢房源資訊","borderRadius":"50upx","backgroundColor": "#fff" } } } } } ]

效果如下:

如何用uni-app實現頂部導航欄顯示按鈕和搜尋框

你可能會問,我的點選事件和輸入框事件如何監聽?

uni-app給出了相應的api,onNavigationBarButtonTap和onNavigationBarS程式設計客棧earchInputChanged,寫在響應的頁面中即可:

export default {
        onNavigationBarButtonTap() {
            console.log("你點選了按鈕")
        },onNavigationBarSearchInputChanged () {
        HQTEqdSp    console.log("你輸入了資訊")
        }
}

列印結果:

如何用uni-app實現頂部導航欄顯示按鈕和搜尋框

但是按鈕有兩個,只有一個按鈕事件怎麼辦?還有輸入框的文字如何獲取?其實這兩個函式接收一個值,就是相對應的資訊:

export default {
    onNavigationBarButtonTap(val) {
        console.log(val)
    },onNavigationBarSearchInputChanged (val) {
        console.log(val)
    }    
}

列印結果:

如何用uni-app實現頂部導航欄顯示按鈕和搜尋框

按鈕事件根據對應的text判斷即可,而輸入框監聽的不是change事件,是input事件,即輸入後即可監聽到而不是失焦

你以為這就完了?NoNoNo,眼尖的同學發現我做的和設計圖還是有區別的,右邊地圖有一個icon我沒有寫,如果按照上邊的方法是不能加的,但是我們可以去掉導航欄自定義

page.json裡每個頁面的導航欄是預設開啟的,有一個navigationStyle屬性,預設值是default,我們把它改成custom就能把他去掉了:

{
  "path": "pages/index/index","style": {
     "navigationStyle":"custom"
}

但是移動端導航依然在,這就需要我們使用titleNView這個屬性了,它是用來專門設定導航欄的,具體如下:

{
            "path" : "pages/secondPage/secondPage","style" : {
                "navigationStyle": "custom","app-plus": {  
                    "titleNView": false  
                }
            }
        }

然後我們自己就可以寫一套導航了,最後效果如下:

如何用uni-app實現頂部導航欄顯示按鈕和搜尋框

這裡有一個坑,除了要給這個導航設定固定定位外,實際上手機最上方的狀態列,也就是這個位置是透明的,因為我們把預設的導航去掉了:

如何用uni-app實現頂部導航欄顯示按鈕和搜尋框

所以我們在寫導航的時候上方的內邊距是比下方的要大那麼一點,這樣才能保證覆蓋狀態列。

下面是我寫的原始碼:

<template>
    <view class="head">
        <view class="header-wrap">
            <view class="index-header">
                <text class="address" v-if="leftWords">{{leftWords}}</text>
                <view class="input-wrap" v-if="input">
                    <input type="text" 
                           placeholder="請輸入搜尋"
                            v-model="value"
                           @change="inputChange"/>
                    <text class="iconfont iconfangdajing"></text>
                </view>
                <view class="map-wrap"
                      v-if="rightWords||rightIcon"
                      @click="rightClick">
                    <text class="iconfont" :class="rightIcon"></text>
                    <text>{{rightWords}}</text>
                </view>
            </view>
        </view>
        <view class="blank"></view>

    </view>
</template>

<script>
    export default {
        name: "IndexHeader",props: [
            'leftWords','input','rightIcon','rightWords'
        ],data () {
            return {
                value: ''
            }
        },methods: {
            inputChange: function () {
                this.$emit('change',this.value)
            },rightClick: function () {
                this.$emit("rightClick")
            }
        }
    }
</script>

<style lang="scss">
    $color-base: #00c16f; 
    $words-color-base: #333333;
    $words-color-light: #999999; 
    .header-wrap {
        width: 100%;
        position: fixed;
        top: 0;
        z-index: 999;
        
        .index-header {
            height: 88upx;
            line-height: 88upx;
            padding: 0 30upx;
            padding-top: 40upx;
            background-color: $color-base;
            font-size: 28upx;
            color: #fff;
            display: flex;
            align-items: center;
            justify-content: space-between;
            
            .address {
                font-size: 26upx;
            }
            
            .input-wrap {
                width: 500upx;
                height: 70upx;
                padding: 10upx 30upx 10upx 100upx;
                box-sizing: border-box;
                background-color: #fff;
                border-radius: 50upx;
                color: $words-color-base;
                position: relative;
                
                text {
                    position: absolute;
                    left: 40upx;
                    top: -8upx;
                    color: $words-color-light;
                    font-size: 30upx;
                }
 程式設計客棧           }
            
            .map-wrap {
                .iconfont {
        www.cppcns.com            font-size: 32upx;
                    margin-right: 5upx;
                }
                text {
                    font-size: 26upx;
                }
            }    
        }
    }
    .blank {
        height: 126upx;
    }
</style>

以上就是如何用uni-app實現頂部導航欄顯示按鈕和搜尋框的詳細內容,更多關於用uni-app實現頂部導航欄顯示按鈕和搜尋框的資料請關注我們其它相關文章!