跳到主要内容

导航栏 Navbar

为页面提供导航功能,用于页面顶部

安装使用

{
// 原生小程序
"usingComponents": {
"ti-navbar": "@titian-design/weapp/navbar/index"
},
// titan-cli搭建的项目
"usingComponents": {
"ti-navbar": "platform://titian-mp/ti-navbar"
}
}

用法示例

基本使用
copy
code
返回和回到首页
copy
code
基本使用
城市
copy
code

基础用法

<ti-navbar title="标题" />
<ti-navbar title="标题" subtitle="副标题" />

沉浸式

获取组件实例:
  1. 非titan-cli项目,可以使用微信原生this.selectComponent();
  2. titan-cli项目,必须使用this.selectComponentAsync;

方式一:监听页面的onPageScroll

code
<ti-navbar id="titian-navbar" title="标题" type="immersion" />

方式二:配合scroll-view,使用scroll-view的bindscroll替换方式一中的onPageScroll,都是需要将滚动高度传入this._navbar.updateOpacity方法。
如果仅仅在微信小程序使用,建议使用微信小程序滚动驱动动画,此方式性能更好。如下示例只有微信小程序有效!!!

code

<ti-navbar id="titian-navbar" title="标题" type="immersion" />
<scroll-view id="scroller" scroll-x="false" scroll-y style="height: 100vh">
页面内容
</scroll-view>

毛玻璃效果

在没有占位的情况下有效,沉浸式模式默认没有占位

<ti-navbar title="标题" use-placeholder="{{false}}" frosted-glass />
<ti-navbar title="标题" type="immersion" frosted-glass />

使用回到首页按钮

<ti-navbar title="标题" use-home-button home-path="YOUR_HOME_PATH"  bind:back="back" />

自定义返回按钮和回到首页按钮的事件

code
<ti-navbar title="标题" back-delta="{{0}}" use-home-button bind:back="back" bind:home="home" />

自定义左侧icon

// 城市选择
<ti-navbar title="标题">
<view slot="prefix">城市<ti-icon name="arrow-down" /></view>
</ti-navbar>

// 自定义返回
<ti-navbar title="标题">
<view slot="prefix"><ti-icon name="arrow-back" />返回</view>
</ti-navbar>

// 自定义搜索
<ti-navbar title="标题">
<view slot="prefix"><ti-icon name="search" />搜索 </view>
</ti-navbar>

// 自定义title
<ti-navbar>
<view slot="title">
<ti-tabs tabs="{{ ['全部', '热销'] }}" ext-style="width: 160px;--tabs-background-color: transparent" />
</view>
</ti-navbar>

针对软键盘弹起时,自定义导航栏被推出页面,提供两种解决方案

注意:
  1. 优先使用方案一。
  2. 同时存在input和textarea的情况下,bind:keyboardheightchange事件会互相影响(微信的bug),可以将所有的bind:keyboardheightchange更换为bind:focus。
  3. 在只有input或者textarea的情况下,建议用bind:keyboardheightchange,在ios上触发时机更早,页面上滑效果和软件盘弹起更同步一些。

方案一:将input的adjust-position设置false,不上推页面,动态修改滚动页面的scrollTop。

注意:
  1. 采用此方案时,如果页面的滚动高度不够,需要添加一个占位元素,如下面示例的: <view style="height: {{ placeholderHeight }}px" />

1.滚动容器为普通页面

code
<ti-navbar id="titian-navbar" title="标题" />
<view>
<view style="height: 70vh">滚动区域...</view>
<ti-input id="titian-input" adjust-position="{{ false }}" bind:keyboardheightchange="bindkeyboardheightchange" bind:blur="bindblur" />
<view style="height: {{ placeholderHeight }}px" />
</view>

2.滚动容器为scroll-view

code
<ti-navbar id="titian-navbar" title="标题" />
<scroll-view scroll-top="{{ scrollTop }}" bind:scroll="bindscroll">
滚动区域
<ti-input id="titian-input" adjust-position="{{ false }}" bind:keyboardheightchange="bindkeyboardheightchange" bind:blur="bindblur" />
<view style="height: {{ placeholderHeight }}px" />
</scroll-view>

方案二:默认上推页面,将navbar动态定位。(备用)

注意:
  1. 此方案不适用于输入控件为textarea的情况,原因是多行输入框,当光标聚焦在任意一行时,页面上推的高度无法计算出来。
code
<ti-navbar id="titian-navbar" title="标题" />
<view>
滚动区域
<ti-input id="titian-input" bind:keyboardheightchange="bindkeyboardheightchange" bind:blur="bindblur" />
</view>

ti-navbar API

属性 Properties

名称类型必填默认值说明备注
typestringnormal导航栏的风格,常规模式:normal 沉浸式:immersion-
backgroundstring-导航栏的背景,可设置颜色,渐变色,图片,同css属性background用法-
font-colorstring-导航条前景颜色值,包括按钮、标题、状态栏的颜色,仅支持 #ffffff 和 #000000-
titlestring-导航栏的标题-
subtitlestring-导航栏的副标题-
left-iconsarray-导航栏左侧图标集合-
use-placeholderbooleantrue是否自动产生一个占位,可以避免导航栏遮盖下面的元素-
use-back-buttonbooleantrue使用组件内部返回按钮-
back-deltanumber1返回的页面数,在use-back-button为true时有效;设置为0时,可以监听bind:back,自定义返回功能小程序专属
use-home-buttonbooleanfalse使用组件内部回到首页按钮-
home-pathstring-首页地址,在use-home-button为true时有效;不设置home-path,可以监听bind:home,自定义回到首页功能小程序专属
transition-distancenumber100沉浸式模式下,滑动指定距离,标题部分从透明至完全显示-
transition-start-topnumber50沉浸式模式下,动画开始的起始距离-
frosted-glassbooleanfalse毛玻璃效果,在usePlaceholder为false 或者 沉浸式模式下有效-
subtitle-heightnumber-使用了subtitle的插槽的情况下,副标题内容高度,此时subtitleHeight为必传-
loadingbooleanfalse是否使用loading-
ext-stylestring | Record<string, string>-根节点样式-

事件 Events

名称参数列表描述备注
bind:click-icon(e: WechatMiniprogram.CustomEvent<{iconName: string}>) => void点击左侧或者右侧icon时触发-
bind:back(e: WechatMiniprogram.CustomEvent<{iconName: string}>) => void点击默认返回按钮时触发-
bind:home(e: WechatMiniprogram.CustomEvent<{iconName: string}>) => void点击默认回到首页按钮时触发-

插槽 Slots

名称说明备注
prefix导航栏左侧图标位置插槽-
title导航栏中间标题位置插槽-
suffix导航栏右侧位置插槽H5专属

外部样式类 External Classes

名称说明备注
ext-title-class标题样式类名-
ext-subtitle-class副标题样式类名-
ext-class根节点样式类名-

CSS 变量 CSS Variable

变量默认值说明备注
--navbar-title-font-size34rpx标题字号-
--navbar-title-color#000000标题颜色,仅支持 #ffffff 和 #000000-
--navbar-title-max-width346rpx标题最大宽度-
--navbar-subtitle-font-sizetheme.fontSize.t4副标题字号-
--navbar-subtitle-line-heighttheme.lineHeight.multiline.t1副标题行高-
--navbar-subtitle-colortheme.color.gray.texticon.400副标题颜色-
--navbar-padding-h16rpx导航栏水平方向内边距-
--navbar-backgroundtheme.color.gray.background.default导航栏背景----
--navbar-backdrop-filterblur(15px)毛玻璃效果的虚化程度-
--navbar-menu-background-左侧自定义的胶囊按钮的背景色-
--navbar-menu-border-color-左侧自定义的胶囊按钮的边框颜色-