美文网首页
uni-app - 基于uView的base-navbar实现

uni-app - 基于uView的base-navbar实现

作者: 西半球_ | 来源:发表于2021-07-12 16:47 被阅读0次

demo 地址: https://github.com/iotjin/jh-uniapp-demo

uni-app项目中,有时通过pages.json设置navbar达不到想要的效果,此时需要使用自定义的navbar组件来实现,本项目中的navbar是基于uView的Navbar 进行二次封装

效果图

在这里插入图片描述

用法

pages.jsonnavigationStyle要设置为custom,然后在需要的页面加nav组件代码

注:实际一个页面只有一个navbar,isFixed是为了demo展示才放出来的属性,一般不加

{
    "path": "pages/module3/index",
    "style": {
        "navigationStyle": "custom", // 使用自定义导航栏
        "navigationBarTitleText": "我的",
        "enablePullDownRefresh": false
    }
}
    <view class="text"> 默认样式,左侧返回和标题 </view>
        <base-navbar :isFixed="false" title="标题" />

        <!-- 自定义右侧solt,rightImg、rightText 失效 -->
        <view class="text"> 自定义右侧solt,rightImg、rightText 失效 </view>
        <base-navbar :isFixed="false" :title="title" :isBack="false" :rightImg="rightImg" :rightText="rightText">
            <u-icon name="chat" size="38" slot="right" @click="clickRightItem"></u-icon>
        </base-navbar>

        <!-- 右侧图片 -->
        <view class="text"> 右侧图片 </view>
        <base-navbar :isFixed="false" :title="title" :isBack="false" :rightImg="rightImg" @clickRightItem="clickRightItem" />

        <!-- 右侧文字 -->
        <view class="text"> 右侧文字 </view>
        <base-navbar :isFixed="false" :title="title" :isBack="false" :rightText="rightText" @clickRightItem="clickRightItem" />

        <!-- 自定义左侧solt,leftImg、leftText 失效  -->
        <view class="text"> 自定义左侧solt,leftImg、leftText 失效 </view>
        <base-navbar :isFixed="false" :title="title" :isBack="false">
            <u-icon name="chat" size="38" slot="left" @click="clickLeftItem"></u-icon>
        </base-navbar>

        <!-- 左侧图片 -->
        <view class="text"> 左侧图片 </view>
        <base-navbar :isFixed="false" :title="title" :isBack="false" :leftImg="leftImg" @clickLeftItem="clickLeftItem" />

        <!-- 左侧文字 -->
        <view class="text"> 左侧文字 </view>
        <base-navbar :isFixed="false" title="标题" :isBack="false" :leftText="leftText" @clickLeftItem="clickLeftItem" />

全部代码


<template>
    <view>
        <u-navbar :is-back="isBack" :back-icon-color="backColor" :title="title" :title-color="titleColor" :background="background" :is-fixed="isFixed">

            <template v-if="$slots.left">
                <slot name="left"></slot>
            </template>
            <template v-else-if="leftImg">
                <image class="nav-item-img" :src="leftImg" @click="onClickNavLeftItem"></image>
            </template>
            <template v-else-if="leftText">
                <view class="nav-item-text" @click="onClickNavLeftItem">{{leftText}}</view>
            </template>

            <template v-if="$slots.right" slot="right">
                <slot name="right"></slot>
            </template>
            <template v-else-if="rightImg" slot="right">
                <image class="nav-item-img" :src="rightImg" @click="onClickNavRightItem"></image>
            </template>
            <template v-else-if="rightText" slot="right">
                <view class="nav-item-text" @click="onClickNavRightItem">{{rightText}}</view>
            </template>

        </u-navbar>
    </view>
</template>

<script>
    export default {
        name: "base-navbar",
        props: {
            // 是否显示返回按钮,默认为true
            isBack: { type: Boolean, default: true },
            title: { type: String, default: '' },
            // 右侧图片地址,优先级高于rightText,低于右侧slot 
            rightImg: { type: String, default: '' },
            rightText: { type: String, default: '' },
            // 左侧图片地址,优先级高于leftText,低于左侧slot
            leftImg: { type: String, default: '' },
            leftText: { type: String, default: '' },
            isFixed: { type: Boolean, default: true },
        },
        data() {
            return {
                backColor: "white",
                titleColor: "white",
                background: {
                    // backgroundColor: '#38BC9D',
                    // // 导航栏背景图
                    // background: 'url(https://cdn.uviewui.com/uview/swiper/1.jpg) no-repeat',
                    // // 还可以设置背景图size属性
                    // backgroundSize: 'cover',
                    // 渐变色
                    backgroundImage: 'linear-gradient(45deg, rgb(28, 187, 180), rgb(141, 198, 63))'
                }
            };
        },
        methods: {
            onClickNavLeftItem() {
                this.$emit("clickLeftItem", {});
            },
            onClickNavRightItem() {
                this.$emit("clickRightItem", {});
            }
        }
    }
</script>

<style>
    .nav-item-text {
        color: white;
        padding: 10px;
        display: flex;
        align-items: center;
        justify-content: center;
    }

    .nav-item-img {
        padding: 10px;
        display: flex;
        align-items: center;
        justify-content: center;
        width: 20px;
        height: 20px;
    }
</style>

相关文章

网友评论

      本文标题:uni-app - 基于uView的base-navbar实现

      本文链接:https://www.haomeiwen.com/subject/xcfdpltx.html