UniApp 實現頂部固定導航欄 Tab 及滾動變色效果

頂部導航欄是一個非常常見的組件,尤其是固定在頂部的 Tab 導航,既能方便用戶快速切換內容,又能保持頁面結構的清晰。本文將詳細介紹如何在 UniApp + Vue3 + TypeScript 項目中實現一個固定在頂部、且能根據滾動狀態改變樣式的 Tab 導航欄。

效果展示

我們要實現的導航欄具有以下特點:

  • 固定在頁面頂部,不隨滾動消失
  • 滾動超過一定距離時,導航欄背景色發生變化(帶動畫過渡)
  • 支持 Tab 切換,并高亮顯示當前選中項
  • 自適應不同設備的狀態欄高度

實現思路

  1. 使用?sticky?定位實現導航欄固定頂部效果
  2. 通過?onPageScroll?監聽頁面滾動事件,判斷滾動距離
  3. 根據滾動距離動態切換導航欄樣式
  4. 利用 UniApp 提供的 API 獲取系統狀態欄高度,實現適配
  5. 實現 Tab 切換的交互邏輯

代碼實現與解析

<template><view class="header-bar"><!-- Tab導航欄 --><view class="tab-navigation" :style="{ paddingTop: navHeight || '50px' }":class="{ scrolled: isScrolled }"><view class="tab-wrapper"><viewv-for="(tab, index) in tabs":key="index"class="tab-item":class="{ active: currentIndex === index }"@click="changeTab(index)">{{ tab }}</view></view></view></view>
</template>

關鍵解析:

  • :style="{ paddingTop: navHeight || '50px' }":動態設置導航欄頂部內邊距,用于適配不同設備的狀態欄高度
  • :class="{ scrolled: isScrolled }":根據滾動狀態動態添加?scrolled?類,實現樣式切換
  • v-for="(tab, index) in tabs":循環渲染 Tab 選項
  • :class="{ active: currentIndex === index }":根據當前選中的索引值,為 Tab 項添加激活樣式
  • @click="changeTab(index)":綁定 Tab 切換事件

腳本邏輯(Script)

<script setup lang="ts">
import { ref, onMounted } from 'vue'
import { onPageScroll } from '@dcloudio/uni-app'// 導航欄高度相關
const navHeight = ref('')
const isScrolled = ref(false) // 滾動狀態標記// 獲取狀態欄高度并設置導航高度
const setNavHeight = () => {// 獲取系統信息const systemInfo = uni.getSystemInfoSync()// 使用狀態欄高度,確保內容不被狀態欄遮擋navHeight.value = systemInfo.statusBarHeight + 'px'
}// 監聽頁面滾動
onPageScroll((e: { scrollTop: number }) => {console.log(e.scrollTop)// 當滾動距離大于等于50px時,切換導航欄樣式isScrolled.value = e.scrollTop >= 50
})// Tab相關數據
const tabs = ['推薦', '黃金', '白銀', 'K金', '鉑金']
const currentIndex = ref(0)// 切換Tab
const changeTab = (index: number) => {currentIndex.value = index
}// 組件掛載時設置導航高度
onMounted(() => {setNavHeight()
})
</script>

關鍵解析:

  1. 狀態欄高度適配

    • setNavHeight?函數通過?uni.getSystemInfoSync()?獲取系統信息,特別是狀態欄高度
    • 在組件掛載時調用?setNavHeight,確保導航欄正確適配不同設備
  2. 滾動監聽與狀態切換

    • 使用 UniApp 提供的?onPageScroll?鉤子監聽頁面滾動事件
    • 當滾動距離?scrollTop?大于等于 50px 時,將?isScrolled?設置為?true,觸發樣式變化
  3. Tab 切換邏輯

    • 定義?tabs?數組存儲導航項文本
    • currentIndex?記錄當前選中的 Tab 索引
    • changeTab?方法用于切換選中的 Tab

樣式設計(Style)

<style scoped>
.header-bar {display: flex;flex-direction: column;padding: 10rpx 20rpx;position: relative;width: 100vw;box-sizing: border-box;height: 2000rpx; /* 僅為演示設置的高度 */background-color: #d86868;transition: background-color 0.3s ease; /* 添加過渡動畫 */
}/* 滾動后的導航欄樣式 */
.scrolled {background-color: orange;z-index: 1000;
}/* Tab導航樣式 */
.tab-navigation {display: flex;justify-content: center;padding: 10px 0;margin-top: 10rpx;position: sticky; /* 關鍵:sticky定位實現固定頂部效果 */top: 0; /* 固定在頂部 */z-index: 1000; /* 確保在其他元素之上 */
}.tab-wrapper {display: flex;justify-content: center;width: auto;
}.tab-item {color: #ffffff;font-size: 16px;padding: 5px 1px;margin: 0 21px;cursor: pointer;white-space: nowrap; /* 防止文本換行 */
}/* 激活狀態的Tab樣式 */
.tab-item.active {border-bottom: 2px solid #ffffff;color: #ffffff;
}
</style>

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

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

相關文章

c++泛型編程

C泛型編程 1. 基本概念 1.1 泛型編程&#xff08;Generic Programming&#xff09; 泛型編程是C中一種重要的編程范式&#xff0c;它通過 參數化類型 來實現代碼的通用性和復用性。 1.2 模板&#xff08;Templates&#xff09; 模板 是泛型編程的基礎&#xff0c;允許編寫與數據…

Vue.js + Node.js 開發前后臺框架

在 Vue.js + Node.js 開發前后臺框架時,推薦采用現代化的技術棧組合和最佳實踐。以下是一個高效、可擴展的全棧框架方案: 技術棧推薦 層級 技術選型 說明 前端框架 Vue 3 (Composition API) 最新Vue核心庫,推薦使用<script setup>語法 UI組件庫 Element Plus / Ant D…

Vision Transformer (ViT) 詳解:當Transformer“看見”世界,計算機視覺的范式革命

摘要: 長久以來&#xff0c;卷積神經網絡&#xff08;CNN&#xff09;憑借其精心設計的歸納偏置&#xff08;inductive biases&#xff09;&#xff0c;無可爭議地統治著計算機視覺領域。然而&#xff0c;一篇名為《An Image is Worth 16x16 Words》的論文徹底改變了這一格局&a…

go goroutine chan 用法

方法1 代碼 package mainimport ("fmt""sync""time" )func main() {allChan : make(chan interface{}, 3)var sendWg, recvWg sync.WaitGroup // 分別同步發送和接收// 發送goroutinesendWg.Add(1)go func() {defer sendWg.Done()for i : 0; i &…

Web前端文件上傳安全與敏感數據安全處理

一、文件上傳安全1. 文件上傳時的核心安全檢查點文件上傳是 Web 應用的高風險功能&#xff0c;需從多維度驗證&#xff0c;防止惡意文件上傳&#xff08;如木馬、病毒&#xff09;或路徑攻擊&#xff0c;關鍵檢查點包括&#xff1a;MIME 類型驗證檢查請求頭中的 Content-Type&a…

文法中的間接左遞歸

&#x1f31f; 第一步&#xff1a;理解基本概念? 什么是文法&#xff08;Grammar&#xff09;&#xff1f;在編程語言或語法分析中&#xff0c;文法 是一組規則&#xff0c;用來描述一種語言的結構。例如&#xff1a;S → A a A → B b B → S c 這表示&#xff1a;S 可以…

Anthropic:跨越生產效能拐點的AI增長飛輪

資本競賽中的戰略轉折點 人工智能領域的競爭已經從理念之爭演變為資本、算力與地緣政治影響力的全面較量。Anthropic傳聞中的1700億美元估值&#xff0c;如果成為現實&#xff0c;將標志著前沿AI發展格局的地震式轉變。這不僅僅是構建更智能模型的問題&#xff0c;更是為主導下…

【Unity3D實例-功能-移動】小兵移動-通過鼠標點擊進行

在Unity的世界里&#xff0c;當你輕點鼠標&#xff0c;角色仿佛被賦予了新的使命&#xff0c;沿著一條無形的軌跡&#xff0c;向著地圖上的目標點進發。每一次移動&#xff0c;不僅是簡單的位移&#xff0c;更是對未知的探索。這種交互&#xff0c;讓玩家與游戲世界緊密相連&am…

從0到1學PHP(十四):PHP 性能優化:打造高效應用

目錄一、PHP 性能評估與分析1.1 性能指標體系1.2 性能分析工具使用1.3 性能瓶頸定位方法與流程二、代碼層面優化技巧2.1 高效的循環與條件判斷寫法2.2 函數與類的優化設計2.3 內存管理與垃圾回收機制優化三、緩存策略與實現3.1 數據緩存3.2 頁面緩存與部分緩存技術3.3 OPcache …

移動管家手機控車系統硬件安裝與軟件綁定設置

移動管家手機控車系統硬件安裝與軟件綁定配合使用&#xff0c;具體設置步驟如下&#xff1a;一、硬件安裝準備 ?加裝智能控制主機?&#xff1a;需在車輛上加裝移動管家專用智能控制模塊&#xff0c;該模塊需與原車電路系統連接&#xff0c;并將原車鑰匙芯片焊接至主控盒內以實…

51單片機入門:數碼管原理介紹及C代碼實現

本文是江協科技up的課堂筆記&#xff01;大家可以去bilibili配合這位up的51單片機入門教程食用&#xff0c;效果更佳~我這里進行詳細介紹&#xff0c;希望你忘記數碼管的時候來這里看看&#xff01;&#xff08;你猜我為什么寫這個TAT&#xff09;一.基本介紹LED數碼管&#xf…

Apache Camel 簡介

相關文檔地址 https://camel.apache.org/components/next/index.htmlhttps://camel.apache.org/components/4.10.x/languages/simple-language.htmlhttps://camel.apache.org/manual/exception-clause.htmlhttps://camel.apache.org/manual/index.htmlhttps://camel.apache.org…

IP離線庫 輸入IP地址立即返回IP所在地址信息(支持Java、Python)

描述 本文實現&#xff1a; 1、離線查詢IP地址 2、IP地址精確到區域 3、IP地址支持國外IP 此時需要一個創建&#xff0c;比如我輸入一個8.8.8.8的IP立馬就需要返回給我一個中文地址信息&#xff0c; 類似于百度的IP搜索&#xff1a; 113.111.186.123如果現在離線環境或者在…

解決MySQL刪除/var/lib/mysql下的所有文件后無法啟動的問題

刪除 MySQL 數據目錄 /var/lib/mysql 下的所有文件后&#xff0c;MySQL 將無法啟動&#xff0c;因為該目錄包含了數據庫的所有數據文件、配置文件和系統表。當這些文件被刪除時&#xff0c;MySQL 無法找到必要的數據和配置&#xff0c;從而無法正常啟動。本文將詳細介紹解決這個…

蒼穹外賣項目學習——day1(項目概述、環境搭建)

文章目錄一、軟件開發整體介紹1.1 軟件開發流程1.2 角色分工1.3 軟件環境分類二、蒼穹外賣項目介紹2.1 定位2.2 功能架構2.3 技術選型三、開發環境搭建3.1 前端環境3.2 后端環境3.3 前后端聯調3.4 登錄功能優化四、接口文檔管理4.1 YApi4.2 Swagger (Knife4j)一、軟件開發整體介…

【QT】Qt信號與槽機制詳解信號和槽的本質自定義信號和槽帶參數的信號和槽

文章目錄前言一、信號的本質二、槽的本質三、 信號和槽的使?3.1 連接信號和槽四、使用步驟4.1 通過QtCreator?成信號槽代碼五、 ?定義信號和槽5.1 ?例1&#xff1a;信號和槽函數初步使用5.2 ?例2 兩個類使用5.3 示例3 按鈕使用觸發信號六、 帶參數的信號和槽6.1 ?例1&…

【OD機試題解法筆記】文件緩存系統

題目描述 請設計一個文件緩存系統&#xff0c;該文件緩存系統可以指定緩存的最大值&#xff08;單位為字節&#xff09;。 文件緩存系統有兩種操作&#xff1a; 存儲文件&#xff08;put&#xff09;讀取文件&#xff08;get&#xff09; 操作命令為&#xff1a; put fileName …

Python中的sys.path與PYTHONPATH全解析:模塊導入路徑的底層機制與最佳實踐

在Python項目開發中&#xff0c;很多人遇到過類似“模塊導入失敗”、“路徑找不到”、“相對導入與絕對導入混亂”等問題。而這些問題的根源&#xff0c;幾乎都繞不開一個核心概念——Python模塊搜索路徑。 今天&#xff0c;我們圍繞sys.path 和 PYTHONPATH環境變量&#xff0…

python:如何調節機器學習算法的魯棒性,以支持向量機SVM為例,讓伙伴們看的更明白

魯棒性&#xff08;Robustness&#xff09;指模型在噪聲數據或異常值干擾下保持性能穩定的能力。想詳細了解的可參考本人之前的博文 python機器學習&#xff1a;評價智能學習算法性能與效果的常見術語&#xff1a;不收斂、過擬合、欠擬合、泛化能力、魯棒性一句話、一張圖給您…

號源加鎖升級思路(解決高并發問題)

原先邏輯鏈接&#xff1a;號源預約加鎖思路_java 預約 接口加鎖-CSDN博客 一、進行治療項目和號源數據緩存 1.新建一個定時任務&#xff0c;主要在凌晨時緩存治療項目和號源數據 1.1.類中使用redission獲取鎖&#xff08;用于分布式系統獲取數據&#xff0c;保證原子性&…