相关文章推荐
(opens new window)

# tui-navigation-bar 自定义导航栏 开源组件

介绍

NavigationBar自定义导航栏,支持自定义NavigationBar内容,支持渐变,支持沉浸式。

# 引入

# uni-app引入

第一种,手动引入(可全局引入)

import tuiNavigationBar from "@/components/thorui/tui-navigation-bar/tui-navigation-bar.vue"
export default {
	components:{
		tuiNavigationBar

第二种,开启easycom组件模式,如果不了解如何配置,可先查看 官网文档 (opens new window)

# uni-app版本平台差异说明

App-Nvue App-vue H5 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
升级中

# 微信小程序引入(可在app.json中全局引入)

{
  "usingComponents": {
    "tui-navigation-bar": "/components/thorui/tui-navigation-bar/tui-navigation-bar"

# 代码演示

部分功能演示,具体可参考示例程序以及文档API。

基础使用

组件默认支持透明渐变,可通过设置 isOpacity 属性值为false,让导航栏默认显示。

splitLine 属性设置底部是否带分割线, scrollTop 属性为滚动条滚动距离, title 属性为NavigationBar标题, backgroundColor 属性为NavigationBar背景颜色,不支持RGB , color 属性为NavigationBar标题颜色。

init 事件:导航栏初始化信息,回传导航栏相关信息。

change 事件:在滚动条距离改变时触发,回传对应的opacity值。

<!--uni-app-->
<tui-navigation-bar splitLine @init="initNavigation" @change="opacityChange" :scrollTop="scrollTop" title="NavBar自定义导航栏" backgroundColor="#fff" color="#333">
 <view class="tui-header-icon" :style="{ marginTop: top + 'px' }">
   <tui-icon name="arrowleft" :color="opacity > 0.85 ? '#333' : '#fff'" @click="back"></tui-icon>
 </view>
</tui-navigation-bar>
// data 数据 及 方法
export default {
 data() {
 	return {
 		top: 0, //标题图标距离顶部距离
 		opacity: 0,
 		scrollTop: 0.5
 methods: {
 	initNavigation(e) {
 		this.opacity = e.opacity;
 		this.top = e.top;
 	opacityChange(e) {
 		this.opacity = e.opacity;
 	back() {
 		uni.navigateBack();
 onPageScroll(e) {
 	this.scrollTop = e.scrollTop;
/* 样式 */
.tui-header-icon {
	width: 100%;
	position: fixed;
	top: 0;
	padding: 0 12rpx;
	display: flex;
	align-items: center;
	height: 32px;
	transform: translateZ(0);
	z-index: 99999;
	box-sizing: border-box;
<!--微信小程序-->
<tui-navigation-bar splitLine bindinit="initNavigation" bindchange="opcityChange" scrollTop="{{scrollTop}}" title="NavBar自定义导航栏" backgroundColor="#fff" color="#333">
 <view class="tui-header-icon" style="margin-top:{{top}}px">
   <tui-icon name="arrowleft" color="{{opacity > 0.85 ? '#333' : '#fff'}}" bindclick="back"></tui-icon>
 </view>
</tui-navigation-bar>
// data 数据 及 方法
Page({
  data: {
    top: 0, //标题图标距离顶部距离
    opacity: 0,
    scrollTop: 0.5
  initNavigation(e) {
   this.setData({
     opacity:e.detail.opacity,
     top:e.detail.top
 opcityChange(e) {
   this.setData({
     opacity:e.detail.opacity
 back() {
   wx.navigateBack();
 onPageScroll(e) {
   this.setData({
     scrollTop:e.scrollTop
/* 样式 */
.tui-header-icon {
	width: 100%;
	position: fixed;
	top: 0;
	padding: 0 12rpx;
	display: flex;
	align-items: center;
	height: 32px;
	transform: translateZ(0);
	z-index: 99999;
	box-sizing: border-box;
// Make sure to add code blocks to your code group

# Slots

插槽名称 说明
default 导航栏内自定义显示内容

# Props

属性名 类型 说明 默认值
title String NavigationBar标题
color String NavigationBar标题颜色 #fff
backgroundColor String NavigationBar背景颜色 不支持RGB,设置渐变色时 isOpacity 属性需设置为false #fff
splitLine Boolean 是否需要分割线 false
isOpacity Boolean 是否设置不透明度,设置渐变色时不支持,且值需要设置为false true
maxOpacity [Number, String] 不透明度最大值 0-1 1
transparent Boolean 背景透明 (设置该属性,则背景透明,只出现内容,isOpacity和maxOpacity失效) false
scrollTop [Number, String] 滚动条滚动距离 0
scrollRatio [Number, String] isOpacity 为true时生效(opacity=scrollTop /windowWidth * scrollRatio) 0.3
isCustom Boolean 是否自定义NavigationBar内容 false
isImmersive Boolean 是否沉浸式 true
isFixed Boolean 是否固定 true
backdropFilter Boolean 是否开启高斯模糊效果[仅在支持的浏览器有效果],为true时maxOpacity设置小于1的值 false
dropDownHide Boolean 下拉隐藏NavigationBar,主要针对有回弹效果ios端 false
zIndex [Number, String] z-index值 9998

# Events

注:uni-app端绑定事件使用@前缀,如@init;微信小程序原生使用bind前缀,如bindinit

事件名 说明 回调参数
init 导航栏初始化信息,回传导航栏相关信息 {
width :导航栏宽度,
height :导航栏高度,
left :左边界坐标(px),
top :上边界坐标(px),
statusBarHeight :Number,
opacity :不透明度,
windowHeight :Number
}
change 在滚动条距离改变时触发,回传对应的opacity值 { opacity :Number}

# 预览

请以移动端效果为准,touch事件目前尚未在PC端做兼容。

 
推荐文章