天天看點

uniapp 打造自用元件庫 (一) 标題欄

uniapp 打造自用元件庫 (一) 标題欄

前言

本文将帶領讀者使用uniapp封裝一些常用元件,友善日後開發時重複使用,當然文中封裝的元件不可能适配所有應用場景,但是我希望讀者可以跟着我的思路實作出來,然後可以在此基礎上優化改進為自己合适的,本人一個前端小菜雞,希望大佬們可以不吝賜教,也是對我的技術水準的提升

标題欄

實作效果

uniapp 打造自用元件庫 (一) 标題欄

應用效果

uniapp 打造自用元件庫 (一) 标題欄

實作思路

通過flex布局将盒子分成左右兩部分,右側預留 需要可以自己添加東西,左側分為3部分:色塊、标題、氣泡,色塊通過接收傳入的顔色來顯示不同顔色,不傳預設不顯示,标題預設為 '标題',傳入顯示新的,氣泡通過傳入的數字控制,為0或不傳不顯示,然後調整樣式

實作代碼

<template>
    <view @tap="change" class="all" >
        <view class="title" >
            <view class="titleLeft">
                <view class="view" v-if="(pieceColor)" :style="{backgroundColor:pieceColor}"></view>
                <text class="text" :style="{color:color}">{{value}}</text>
                <view class="bubble" :style="{backgroundColor:pieceColor}" v-if="num>0">{{num}}</view>
            </view>
      <view class="titleRight">
            </view>
        </view>
    </view>
</template>

<script>
    export default {
        props: {
            //标題
            value: {
                type: String,
                default: '标題'
            },
            //文字顔色
            color: {
                type: String,
                default: '#333'
            },
            //色塊顔色 預設空
            pieceColor: {
                type: String,
                default: ''
            },
            //數字氣泡 0未空
            num: {
                type: Number,
                default: 0
            },
        },
        
        data() {
            return {

            };
        },
        
        methods: {
            change(e) {
                this.$emit('change', this.value)
            }
        },
    }
</script>

<style lang="scss" scoped>
    .all {
        background:rgba(255,255,255,0.8);
        backdrop-filter: saturate(180%) blur(20px);
    }

    .bubble {
        margin-left: 20rpx;
        padding: 0rpx 10rpx;
        display: flex;
        font-size: 10px;
        color: #FFFFFF;
        justify-content: center;
        align-items: center;
        border-radius: 80rpx;
    }

    .title {

        display: flex;
        align-items: center;
        padding: 30rpx;
        .titleLeft{
            display: flex;
            flex: 1;
            .view {
                width: 10rpx;
                height: 40rpx;
                margin-right: 20rpx;
                border-radius: 5rpx;
            }
            .text {
                font-size: 16px;
                font-weight: bold;
                overflow: hidden;
                text-overflow: ellipsis;
                white-space: nowrap;
            }
        }

        
    }
</style>