2023-07-03 Uniapp自定义TabBar栏

全局公用获取手机状态栏高度,胶囊按钮高度。

// 获取系统信息
            uni.getSystemInfo({
                success: function(e) {
                    // #ifndef MP
                    Vue.prototype.StatusBar = e.statusBarHeight;        // e.statusBarHeight 手机状态栏高度
                    if (e.platform == 'android') {
                        Vue.prototype.CustomBar = e.statusBarHeight + 50;
                    } else {
                        Vue.prototype.CustomBar = e.statusBarHeight + 45;
                    };
                    // #endif
                    // #ifdef MP-WEIXIN
                    
                    Vue.prototype.StatusBar = e.statusBarHeight;
                    let custom = wx.getMenuButtonBoundingClientRect();  // 获取菜单按钮(右上角胶囊按钮)的布局位置信息。坐标信息以屏幕左上角为原点
                    console.log(custom,'888888888888888888')
                    Vue.prototype.Custom = custom;
                    Vue.prototype.CustomBar = custom.bottom + custom.top - e.statusBarHeight;
                    // #endif       
                    // #ifdef MP-ALIPAY
                    Vue.prototype.StatusBar = e.statusBarHeight;
                    Vue.prototype.CustomBar = e.statusBarHeight + e.titleBarHeight;
                    // #endif
                }
            })

自定义中间凸起tabBar

  • 配置pages页面路径
  • main.js中引入组件全局注入
import articlelist from './pages/xiaotan/articlelist.vue'
Vue.component('articlelist',articlelist)
import join from './pages/join/join.vue'
Vue.component('join',join)
import news from './pages/news/news.vue'
Vue.component('news',news)
import my from './pages/my/my.vue'
Vue.component('my',my)
import cuCustom from './components/cu-custom.vue'
Vue.component('cu-custom',cuCustom)
  • .Vue文件配置
<template>
    <view>

        <home v-if="PageCur=='home'"></home>
        <articlelist v-if="PageCur=='articlelist'"></articlelist>
        <join v-if="PageCur=='join'"></join>
        <news v-if="PageCur=='news'"></news>
        <my v-if="PageCur=='my'"></my>
        <view class="cu-bar tabbar bg-white foot">
            <view class="action " :class="PageCur=='home'?'text-cyan':''" @click="NavChange" data-cur="home">
                <view class="cuIcon-cu-image">
                    <image :src="PageCur=='home'?'/static/homefill.png':'/static/home.png'"></image>
                </view>首页
            </view>
            <view class="action " :class="PageCur=='articlelist'?'text-cyan':''" @click="NavChange" data-cur="articlelist">
                <view class="cuIcon-cu-image">
                    <image :src="PageCur=='articlelist'?'/static/wefill.png':'/static/we.png'"></image>
                </view>分类
            </view>
            <view class="action  add-action" :class="PageCur=='join'?'text-cyan':''" @click="NavChange" data-cur="join">
                <button class="cu-btn cuIcon-cu-image bg-cyan shadow">
                    <image src="@/static/add.png"></image>
                </button>
                发布
            </view>
            <view class="action " :class="PageCur=='news'?'text-cyan':''" @click="NavChange" data-cur="news">
                <view class="cuIcon-cu-image">
                    <image :src="PageCur=='news'?'/static/messagefill.png':'/static/message.png'"></image>
                </view>
                消息
            </view>
            <view class="action " :class="PageCur=='my'?'text-cyan':''" @click="NavChange" data-cur="my">
                <view class="cuIcon-cu-image">
                    <image :src="PageCur=='my'?'/static/myfill.png':'/static/my.png'"></image>
                </view>
                我的
            </view>
        </view>
    </view>
</template>

<script>
    export default {
        data() {
            return {
                PageCur:'home',
            }
        },
        onLoad() {

        },
        methods: {
            NavChange: function(e) {
                this.PageCur = e.currentTarget.dataset.cur
            }
        }
    }
</script>

<style>
    /* ==================
            初始化
     ==================== */
        body {
            background-color: #f1f1f1;
            font-size: 28upx;
            color: #333333;
            font-family: Helvetica Neue, Helvetica, sans-serif;
        }
    
        view,
        scroll-view,
        swiper,
        button,
        input,
        textarea,
        label,
        navigator,
        image {
            box-sizing: border-box;
        }
    
        .round {
            border-radius: 5000upx;
        }
    
        .radius {
            border-radius: 6upx;
        }
    
        .bg-red {
            background-color: #e54d42;
            color: #ffffff;
        }
    
        .bg-orange {
            background-color: #f37b1d;
            color: #ffffff;
        }
    
        .bg-yellow {
            background-color: #fbbd08;
            color: #333333;
        }
    
        .bg-olive {
            background-color: #8dc63f;
            color: #ffffff;
        }
    
        .bg-green {
            background-color: #39b54a;
            color: #ffffff;
        }
    
        .bg-cyan {
            background-color: #1cbbb4;
            color: #ffffff;
        }
    
        .bg-blue {
            background-color: #0081ff;
            color: #ffffff;
        }
    
    
        .bg-grey {
            background-color: #8799a3;
            color: #ffffff;
        }
    
        .bg-gray {
            background-color: #f0f0f0;
            color: #333333;
        }
    
        .bg-black {
            background-color: #333333;
            color: #ffffff;
        }
    
        .bg-white {
            background-color: #ffffff;
            color: #666666;
        }
    
        .text-cyan,
        .line-cyan,
        .lines-cyan {
            color: #1cbbb4;
        }
        /* ==================
              操作条
     ==================== */
    
        .cu-bar {
            display: flex;
            position: relative;
            align-items: center;
            min-height: 100upx;
            justify-content: space-between;
        }
    
        .cu-bar .action {
            display: flex;
            align-items: center;
            height: 100%;
            justify-content: center;
            max-width: 100%;
        }
    
        .cu-bar .action.border-title {
            position: relative;
            top: -10upx;
        }
    
        .cu-bar .action.border-title text[class*="bg-"]:last-child {
            position: absolute;
            bottom: -0.5rem;
            min-width: 2rem;
            height: 6upx;
            left: 0;
        }
    
        .cu-bar .action.sub-title {
            position: relative;
            top: -0.2rem;
        }
    
        .cu-bar .action.sub-title text {
            position: relative;
            z-index: 1;
        }
    
        .cu-bar .action.sub-title text[class*="bg-"]:last-child {
            position: absolute;
            display: inline-block;
            bottom: -0.2rem;
            border-radius: 6upx;
            width: 100%;
            height: 0.6rem;
            left: 0.6rem;
            opacity: 0.3;
            z-index: 0;
        }
    
        .cu-bar .action.sub-title text[class*="text-"]:last-child {
            position: absolute;
            display: inline-block;
            bottom: -0.7rem;
            left: 0.5rem;
            opacity: 0.2;
            z-index: 0;
            text-align: right;
            font-weight: 900;
            font-size: 36upx;
        }
    
        .cu-bar.justify-center .action.border-title text:last-child,
        .cu-bar.justify-center .action.sub-title text:last-child {
            left: 0;
            right: 0;
            margin: auto;
            text-align: center;
        }
    
        .cu-bar .action:first-child {
            margin-left: 30upx;
            font-size: 30upx;
        }
    
        .cu-bar .action text.text-cut {
            text-align: left;
            width: 100%;
        }
    
        .cu-bar .cu-avatar:first-child {
            margin-left: 20upx;
        }
    
        .cu-bar .action:first-child>text[class*="cuIcon-"] {
            margin-left: -0.3em;
            margin-right: 0.3em;
        }
    
        .cu-bar .action:last-child {
            margin-right: 30upx;
        }
    
        .cu-bar .action>text[class*="cuIcon-"],
        .cu-bar .action>view[class*="cuIcon-"] {
            font-size: 36upx;
        }
    
        .cu-bar .action>text[class*="cuIcon-"]+text[class*="cuIcon-"] {
            margin-left: 0.5em;
        }
    
        .cu-bar .content {
            position: absolute;
            text-align: center;
            width: calc(100% - 340upx);
            left: 0;
            right: 0;
            bottom: 0;
            top: 0;
            margin: auto;
            height: 60upx;
            font-size: 32upx;
            line-height: 60upx;
            cursor: none;
            pointer-events: none;
            text-overflow: ellipsis;
            white-space: nowrap;
            overflow: hidden;
        }
    
        .cu-bar.ios .content {
            bottom: 7px;
            height: 30px;
            font-size: 32upx;
            line-height: 30px;
        }
    
        .cu-bar.btn-group {
            justify-content: space-around;
        }
    
        .cu-bar.btn-group button {
            padding: 20upx 32upx;
        }
    
        .cu-bar.btn-group button {
            flex: 1;
            margin: 0 20upx;
            max-width: 50%;
        }
    
        .cu-bar .search-form {
            background-color: #f5f5f5;
            line-height: 64upx;
            height: 64upx;
            font-size: 24upx;
            color: #333333;
            flex: 1;
            display: flex;
            align-items: center;
            margin: 0 30upx;
        }
    
        .cu-bar .search-form+.action {
            margin-right: 30upx;
        }
    
        .cu-bar .search-form input {
            flex: 1;
            padding-right: 30upx;
            height: 64upx;
            line-height: 64upx;
            font-size: 26upx;
            background-color: transparent;
        }
    
        .cu-bar .search-form [class*="cuIcon-"] {
            margin: 0 0.5em 0 0.8em;
        }
    
        .cu-bar .search-form [class*="cuIcon-"]::before {
            top: 0upx;
        }
    
        .cu-bar.fixed,
        .nav.fixed {
            position: fixed;
            width: 100%;
            top: 0;
            z-index: 1024;
            box-shadow: 0 1upx 6upx rgba(0, 0, 0, 0.1);
        }
    
        .cu-bar.foot {
            position: fixed;
            width: 100%;
            bottom: 0;
            z-index: 1024;
            box-shadow: 0 -1upx 6upx rgba(0, 0, 0, 0.1);
        }
    
        .cu-bar.tabbar {
            padding: 0;
            height: calc(100upx + env(safe-area-inset-bottom) / 2);
            padding-bottom: calc(env(safe-area-inset-bottom) / 2);
        }
    
        .cu-tabbar-height {
            min-height: 100upx;
            height: calc(100upx + env(safe-area-inset-bottom) / 2);
        }
    
        .cu-bar.tabbar.shadow {
            box-shadow: 0 -1upx 6upx rgba(0, 0, 0, 0.1);
        }
    
        .cu-bar.tabbar .action {
            font-size: 22upx;
            position: relative;
            flex: 1;
            text-align: center;
            padding: 0;
            display: block;
            height: auto;
            line-height: 1;
            margin: 0;
            background-color: inherit;
            overflow: initial;
        }
    
        .cu-bar.tabbar.shop .action {
            width: 140upx;
            flex: initial;
        }
    
        .cu-bar.tabbar .action.add-action {
            position: relative;
            z-index: 2;
            padding-top: 50upx;
        }
    
        .cu-bar.tabbar .action.add-action [class*="cuIcon-"] {
            position: absolute;
            width: 70upx;
            z-index: 2;
            height: 70upx;
            border-radius: 50%;
            line-height: 70upx;
            font-size: 50upx;
            top: -35upx;
            left: 0;
            right: 0;
            margin: auto;
            padding: 0;
        }
    
        .cu-bar.tabbar .action.add-action::after {
            content: "";
            position: absolute;
            width: 100upx;
            height: 100upx;
            top: -50upx;
            left: 0;
            right: 0;
            margin: auto;
            box-shadow: 0 -3upx 8upx rgba(0, 0, 0, 0.08);
            border-radius: 50upx;
            background-color: inherit;
            z-index: 0;
        }
    
        .cu-bar.tabbar .action.add-action::before {
            content: "";
            position: absolute;
            width: 100upx;
            height: 30upx;
            bottom: 30upx;
            left: 0;
            right: 0;
            margin: auto;
            background-color: inherit;
            z-index: 1;
        }
    
        .cu-bar.tabbar .btn-group {
            flex: 1;
            display: flex;
            justify-content: space-around;
            align-items: center;
            padding: 0 10upx;
        }
    
        .cu-bar.tabbar button.action::after {
            border: 0;
        }
    
        .cu-bar.tabbar .action [class*="cuIcon-"] {
            width: 100upx;
            position: relative;
            display: block;
            height: auto;
            margin: 0 auto 10upx;
            text-align: center;
            font-size: 40upx;
        }
    
        .cu-bar.tabbar .action .cuIcon-cu-image {
            margin: 0 auto;
        }
    
        .cu-bar.tabbar .action .cuIcon-cu-image image {
            width: 36upx;
            height: 36upx;
            display: inline-block;
        }
    
        .cu-bar.tabbar .submit {
            align-items: center;
            display: flex;
            justify-content: center;
            text-align: center;
            position: relative;
            flex: 2;
            align-self: stretch;
        }
    
        .cu-bar.tabbar .submit:last-child {
            flex: 2.6;
        }
    
        .cu-bar.tabbar .submit+.submit {
            flex: 2;
        }
    
        .cu-bar.tabbar.border .action::before {
            content: " ";
            width: 200%;
            height: 200%;
            position: absolute;
            top: 0;
            left: 0;
            transform: scale(0.5);
            transform-origin: 0 0;
            border-right: 1upx solid rgba(0, 0, 0, 0.1);
            z-index: 3;
        }
    
        .cu-bar.tabbar.border .action:last-child:before {
            display: none;
        }
    
        .cu-bar.input {
            padding-right: 20upx;
            background-color: #ffffff;
        }
    
        .cu-bar.input input {
            overflow: initial;
            line-height: 64upx;
            height: 64upx;
            min-height: 64upx;
            flex: 1;
            font-size: 30upx;
            margin: 0 20upx;
        }
    
        .cu-bar.input .action {
            margin-left: 20upx;
        }
    
        .cu-bar.input .action [class*="cuIcon-"] {
            font-size: 48upx;
        }
    
        .cu-bar.input input+.action {
            margin-right: 20upx;
            margin-left: 0upx;
        }
    
        .cu-bar.input .action:first-child [class*="cuIcon-"] {
            margin-left: 0upx;
        }

</style>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351

推荐阅读更多精彩内容