微信小程序(uniapp)自定義 TabBar

微信小程序(uniapp)自定義 TabBar 實現指南

在微信小程序開發中,TabBar 是底部導航欄的重要組件,但官方提供的 TabBar 樣式和功能較為基礎,無法滿足所有項目的需求。本文將詳細介紹如何在 uniapp 中實現自定義 TabBar,并提供完整的實現思路和代碼示例。


一、自定義 TabBar 的實現思路
  1. 隱藏原生 TabBar
    pages.json 文件中,將 tabBar 配置項設置為空或移除,從而隱藏原生 TabBar。

  2. 創建自定義 TabBar 組件
    在項目中創建一個全局組件,用于渲染自定義的 TabBar。

  3. 動態切換頁面內容
    使用 uni.switchTabuni.navigateTo 方法切換頁面,同時控制 TabBar 的選中狀態。

  4. 全局管理 TabBar 狀態
    通過 Vuex 或全局變量管理當前選中的 TabBar 項,確保狀態同步。


二、實現步驟
1. 隱藏原生 TabBar

pages.json 文件中,移除或注釋掉 tabBar 配置:

{"pages": [{"path": "pages/index/index","style": {"navigationBarTitleText": "首頁"}},{"path": "pages/mine/mine","style": {"navigationBarTitleText": "我的"}}],"globalStyle": {"navigationBarTextStyle": "black","navigationBarTitleText": "uni-app","navigationBarBackgroundColor": "#FFFFFF","backgroundColor": "#FFFFFF"},// "tabBar": {}
2. 創建自定義 TabBar 組件

components 目錄下創建 CustomTabBar.vue 文件:

<template><view class="tab-bar"><viewv-for="(item, index) in tabList":key="index"class="tab-item":class="{ active: currentTab === index }"@click="switchTab(index, item.path)"><image :src="currentTab === index ? item.iconActive : item.icon" class="tab-icon" /><text>{{ item.text }}</text></view></view>
</template>
export default {data() {return {currentTab: 0,tabList: [{ text: "首頁", path: "/pages/index/index", icon: "/static/home.png", iconActive: "/static/home-active.png" },{ text: "我的", path: "/pages/mine/mine", icon: "/static/mine.png", iconActive: "/static/mine-active.png" }]};},methods: {switchTab(index, path) {this.currentTab = index;uni.switchTab({ url: path });}}
};
.tab-bar {position: fixed;bottom: 0;width: 100%;height: 50px;background-color: #ffffff;display: flex;justify-content: space-around;align-items: center;border-top: 1px solid #eaeaea;
}
.tab-item {text-align: center;flex: 1;
}
.tab-item.active {color: #007aff;
}
.tab-icon {width: 24px;height: 24px;
}

完整代碼:

<template><view class="tab-bar"><viewv-for="(item, index) in tabList":key="index"class="tab-item":class="{ active: currentTab === index }"@click="switchTab(index, item.path)"><image :src="currentTab === index ? item.iconActive : item.icon" class="tab-icon" /><text>{{ item.text }}</text></view></view>
</template><script>
export default {data() {return {currentTab: 0,tabList: [{ text: "首頁", path: "/pages/index/index", icon: "/static/home.png", iconActive: "/static/home-active.png" },{ text: "我的", path: "/pages/mine/mine", icon: "/static/mine.png", iconActive: "/static/mine-active.png" }]};},methods: {switchTab(index, path) {this.currentTab = index;uni.switchTab({ url: path });}}
};
</script><style>
.tab-bar {position: fixed;bottom: 0;width: 100%;height: 50px;background-color: #ffffff;display: flex;justify-content: space-around;align-items: center;border-top: 1px solid #eaeaea;
}
.tab-item {text-align: center;flex: 1;
}
.tab-item.active {color: #007aff;
}
.tab-icon {width: 24px;height: 24px;
}
</style>
3. 在頁面中引入自定義 TabBar

在需要顯示 TabBar 的頁面中,引入并使用該組件。例如,在 pages/index/index.vue 中:

<template><view class="page"><view class="content"><!-- 頁面內容 --></view><custom-tab-bar /></view>
</template><script>
import CustomTabBar from "@/components/CustomTabBar.vue";export default {components: {CustomTabBar}
};
</script><style>
.page {padding-bottom: 50px; /* 留出 TabBar 的空間 */
}
.content {/* 頁面內容樣式 */
}
</style>
4. 全局狀態管理(可選)

如果項目中有多個頁面需要共享 TabBar 的選中狀態,可以使用 Vuex 或全局變量來管理 currentTab

三、注意事項
  1. 頁面高度調整
    由于自定義 TabBar 是固定在頁面底部的,因此需要在頁面內容中留出足夠的空間,避免內容被 遮擋。
  2. 圖標資源路徑
    確保圖標資源的路徑正確,并且支持不同分辨率的設備。
  3. 性能優化
    自定義 TabBar 組件會在每個頁面中重復渲染,建議將組件邏輯封裝為通用組件,減少重復代碼。
  4. 兼容性
    自定義 TabBar 的實現方式在小程序和 H5 環境中均可使用,但需要注意不同平臺的樣式差異。
四、總結

通過隱藏原生 TabBar 并使用自定義組件,開發者可以靈活實現符合項目需求的 TabBar 樣式和功能。同時,通過全局狀態管理和樣式優化,可以進一步提升項目的可維護性和用戶體驗。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/83715.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/83715.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/83715.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MLP實戰二:MLP 實現圖像數字多分類

任務 實戰&#xff08;二&#xff09;&#xff1a;MLP 實現圖像多分類 基于 mnist 數據集&#xff0c;建立 mlp 模型&#xff0c;實現 0-9 數字的十分類 task: 1、實現 mnist 數據載入&#xff0c;可視化圖形數字&#xff1b; 2、完成數據預處理&#xff1a;圖像數據維度轉換與…

BUUCTF[HCTF 2018]WarmUp 1題解

BUUCTF[HCTF 2018]WarmUp 1題解 分析解題過程代碼審計主體函數CHECK函數&#xff1a; 構造payload 總結 分析 啟動靶機&#xff0c;進入網址&#xff0c;是一張滑稽的表情包&#xff1a; 程序化F12查看源碼&#xff1a; 發現注釋內容&#xff0c;訪問 url:/source.php得到…

大陸4D毫米波雷達ARS548調試

本文介紹了大陸ARS548毫米波雷達的調試與測試流程&#xff0c;主要包括以下內容&#xff1a; 設備參數&#xff1a;最大檢測距離301m&#xff08;可調93-1514m&#xff09;&#xff0c;支持gPTP時間同步。 接線調試&#xff1a; Windows需使用USB-RJ45轉換器 Linux可直接連接網…

TDengine 的 AI 應用實戰——運維異常檢測

作者&#xff1a; derekchen Demo數據集準備 我們使用公開的 NAB數據集 里亞馬遜 AWS 東海岸數據中心一次 API 網關故障中&#xff0c;某個服務器上的 CPU 使用率數據。數據的頻率為 5min&#xff0c;單位為占用率。由于 API 網關的故障&#xff0c;會導致服務器上的相關應用…

并發編程 - go版

1.并發編程基礎概念 進程和線程 A. 進程是程序在操作系統中的一次執行過程&#xff0c;系統進行資源分配和調度的一個獨立單位。B. 線程是進程的一個執行實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。C.一個進程可以創建和撤銷多個線程;同一個進程中…

《一生一芯》數字實驗三:加法器與ALU

1. 實驗目標 設計一個能實現如下功能的4位帶符號位的 補碼 ALU&#xff1a; Table 4 ALU 功能列表 ? 功能選擇 功能 操作 000 加法 AB 001 減法 A-B 010 取反 Not A 011 與 A and B 100 或 A or B 101 異或 A xor B 110 比較大小 If A<B then out1…

解讀《網絡安全法》最新修訂,把握網絡安全新趨勢

《網絡安全法》自2017年施行以來&#xff0c;在維護網絡空間安全方面發揮了重要作用。但隨著網絡環境的日益復雜&#xff0c;網絡攻擊、數據泄露等事件頻發&#xff0c;現行法律已難以完全適應新的風險挑戰。 2025年3月28日&#xff0c;國家網信辦會同相關部門起草了《網絡安全…

Java并發編程實戰 Day 10:原子操作類詳解

【Java并發編程實戰 Day 10】原子操作類詳解 開篇 這是“Java并發編程實戰”系列的第10天&#xff0c;我們將深入探討原子操作類的核心技術——CAS原理、ABA問題以及原子類的實現機制。通過理論結合代碼實踐的方式&#xff0c;幫助讀者理解并掌握如何在實際工作中高效使用原子…

瀚文機械鍵盤固件開發詳解:HWKeyboard.h文件解析與應用

【手把手教程】從零開始的機械鍵盤固件開發&#xff1a;HWKeyboard.h詳解 前言 大家好&#xff0c;我是鍵盤DIY愛好者Despacito0o&#xff01;今天想和大家分享我開發的機械鍵盤固件核心頭文件HWKeyboard.h的設計思路和技術要點。這個項目是我多年來對鍵盤固件研究的心血結晶…

2048游戲的技術實現分析-完全Java和Processing版

目錄 簡介Processing庫基礎項目構建指南項目結構核心數據結構游戲核心機制圖形界面實現性能優化代碼詳解設計模式分析測試策略總結與展望簡介 2048是一款由Gabriele Cirulli開發的經典益智游戲。本文將深入分析其Java實現版本的技術細節。該實現使用了Processing庫來創建圖形界…

Spring Boot + Elasticsearch + HBase 構建海量數據搜索系統

Spring Boot Elasticsearch HBase 構建海量數據搜索系統 &#x1f4d6; 目錄 1. 系統需求分析2. 系統架構設計3. Elasticsearch 與 HBase 集成方案4. Spring Boot 項目實現5. 大規模搜索系統最佳實踐 項目概述 本文檔提供了基于 Spring Boot、Elasticsearch 和 HBase 構建…

【iOS】YYModel源碼解析

YYModel源碼解析 文章目錄 YYModel源碼解析前言YYModel性能優勢YYModel簡介YYClassInfo解析YYClassIvarInfo && objc_ivarYYClassMethodInfo && objc_methodYYClassPropertyInfo && property_tYYClassInfo && objc_class YYClassInfo的初始化細…

宇樹科技更名“股份有限公司”深度解析:機器人企業IPO前奏與資本化路徑

從技術落地到資本躍遷&#xff0c;拆解股改背后的上市邏輯與行業啟示 核心事件&#xff1a;股改釋放的上市信號 2025年5月28日&#xff0c;杭州宇樹科技有限公司正式更名“杭州宇樹科技股份有限公司”&#xff0c;市場主體類型變更為“股份有限公司”。盡管官方稱為常規運營調…

Android Native 內存泄漏檢測全解析:從原理到工具的深度實踐

引言 Android應用的內存泄漏不僅發生在Java/Kotlin層&#xff0c;Native&#xff08;C/C&#xff09;層的泄漏同樣普遍且隱蔽。由于Native內存不受Java虛擬機&#xff08;JVM&#xff09;管理&#xff0c;泄漏的內存無法通過GC自動回收&#xff0c;長期積累會導致應用內存占用…

Vortex GPGPU的github流程跑通與功能模塊波形探索(四)

文章目錄 前言一、demo的輸入文件二、trace_csv三、2個值得注意的點3.1 csv指令表格里面的tmask&#xff1f;3.2 rtlsim和simx的log文件&#xff1f; 總結 前言 跟著前面那篇最后留下的幾個問題接著把輸出波形文件和csv文件的輸入、輸出搞明白&#xff01; 一、demo的輸入文件…

UnityPSD文件轉UI插件Psd2UnityuGUIPro3.4.0u2017.4.2介紹:Unity UI設計的高效助手

UnityPSD文件轉UI插件Psd2UnityuGUIPro3.4.0u2017.4.2介紹&#xff1a;Unity UI設計的高效助手 【下載地址】UnityPSD文件轉UI插件Psd2UnityuGUIPro3.4.0u2017.4.2介紹 這款開源插件將PSD文件無縫轉換為Unity的UI元素&#xff0c;極大提升開發效率。它支持一鍵轉換&#xff0c;…

力扣100題之128. 最長連續序列

方法1 使用了hash 方法思路 使用哈希集合&#xff1a;首先將數組中的所有數字存入一個哈希集合中&#xff0c;這樣可以在 O(1) 時間內檢查某個數字是否存在。 尋找連續序列&#xff1a;遍歷數組中的每一個數字&#xff0c;對于每一個數字&#xff0c; 檢查它是否是某個連續序列…

Java爬蟲技術詳解:原理、實現與優勢

一、什么是網絡爬蟲&#xff1f; 網絡爬蟲&#xff08;Web Crawler&#xff09;&#xff0c;又稱網絡蜘蛛或網絡機器人&#xff0c;是一種自動化程序&#xff0c;能夠按照一定的規則自動瀏覽和抓取互聯網上的信息。爬蟲技術是大數據時代獲取網絡數據的重要手段&#xff0c;廣泛…

神經網絡與深度學習 網絡優化與正則化

1.網絡優化存在的難點 &#xff08;1&#xff09;結構差異大&#xff1a;沒有通用的優化算法&#xff1b;超參數多 &#xff08;2&#xff09;非凸優化問題&#xff1a;參數初始化&#xff0c;逃離局部最優 &#xff08;3&#xff09;梯度消失&#xff08;爆炸&#xff09; …

【匯編逆向系列】二、函數調用包含單個參數之整型-ECX寄存器,LEA指令

目錄 一. 匯編源碼 二. 匯編分析 1. ECX寄存器 2. 棧位置計算? 3. 特殊指令深度解析 三、 匯編轉化 一. 匯編源碼 single_int_param:0000000000000040: 89 4C 24 08 mov dword ptr [rsp8],ecx0000000000000044: 57 push rdi0000…