遇到的一个需求是在tabbar上有一个凸起的小图标, 但是微信自带的tabbar是没有这个效果的, 无奈,只能使用自定义tabbar,查找了多方文档后发现大多是原生小程序实现, 关于taro文档的少之又少, 所以记录下来,方便下次查看。

该实现方式是借鉴了官方demo以及一位大佬关于原生小程序自定义tabbar的文章

官方demo传送门:自定义tabbar    文章传送门:点击此处

关于taro实现方式,我放在了github上:https://github.com/puerilexy/tabbarDemo

效果展示:(可以看到下面凸出的智能机器人图标)

第一步: 在app.js中的tabbar字段下指定custom: true,即为启用自定义tabbar

config = {
pages: [
'pages/index/index',
'pages/user/user',
'pages/intellect/intellect'
],
window: {
backgroundColor: '#f4f4f4',
backgroundTextStyle: 'light',
navigationBarBackgroundColor: '#fff',
navigationBarTitleText: 'WeChat',
navigationBarTextStyle: 'black'
},
tabBar: {
color: '#666',
selectedColor: '#ed6c00',
backgroundColor: '#fafafa',
borderStyle: 'black',
custom: true,
list: [{
pagePath: 'pages/index/index',
iconPath: 'assets/home.png',
selectedIconPath: 'assets/home-active.png',
text: '主页'
}, {
pagePath: 'pages/user/user',
iconPath: 'assets/user.png',
selectedIconPath: 'assets/user-active.png',
text: '我的'
}]
}
}

第二步:在src目录下新建custom-tab-bar文件夹(注意此文件夹和pages文件目录同级)

├── src
├── custom-tab-bar
├── index.js
├── index.scss
├── pages
├── index
├── user
├── intellect

在custom-tab-bar下的index文件中代码如下:

import Taro, {
Component
} from '@tarojs/taro'
import {
CoverView, CoverImage
} from '@tarojs/components'
import Intellect from '../assets/intellect.png'
import './index.scss' class customTabBar extends Component { state = {
selected: 0,
color: '#666',
selectedColor: '#ed6c00',
list: [{
pagePath: '/pages/index/index',
iconPath: '/assets/home.png',
selectedIconPath: '/assets/home-active.png',
text: '主页'
},
{
pagePath: '/pages/user/user',
iconPath: '/assets/user.png',
selectedIconPath: '/assets/user-active.png',
text: '我的'
}
]
} switchTab = (item) => {
const url = item.pagePath
Taro.switchTab({
url
})
} jumpIntellect = () => {
Taro.navigateTo({url: '/pages/intellect/intellect'})
} componentDidMount() {
this.setState({
selected: this.props.ind
})
} // 自定义 tabBar的页面
render() {
return (
<CoverView className='tab-bar'>
<CoverView className='tab-bar-wrap'>
{
this.state.list.map((item, index) => {
return <CoverView className='tab-bar-wrap-item'
onClick={this.switchTab.bind(this, item)}
data-path={item.pagePath}
key={item.text}
>
<CoverImage className='tab-bar-wrap-item-icon' src={this.state.selected === index ? item.selectedIconPath : item.iconPath} />
<CoverView className='tab-bar-wrap-item-btn'
style={{color: this.state.selected === index ? this.state.selectedColor : this.state.color}}
>{item.text}
</CoverView>
</CoverView>
})
}
</CoverView>
<CoverImage className='intellect-icon' src={Intellect} onClick={this.jumpIntellect} />
</CoverView>
)
}
}
export default customTabBar

注意: 这里是我在华为手机测试中出现自定义的tabbar会跟随页面滚动而滚动, 在我选择了cover-view组件后解决了这一问题

另外如果中间的图标跳转为二级页面,则不需要配置在tabbar字段下。

第三步:分别在index合user文件中获取自定义tabbar组件实例,更新选中态(注意:原生小程序中可直接通过this.getTabBar直接获取,在taro中需要通过this.$scope.getTabBar来获取组件实例)

// index.js
componentDidShow () {
if (typeof this.$scope.getTabBar === 'function' && this.$scope.getTabBar()) {
this.$scope.getTabBar().$component.setState({
selected: 0
})
}
} // user.js
componentDidShow () {
if (typeof this.$scope.getTabBar === 'function' && this.$scope.getTabBar()) {
this.$scope.getTabBar().$component.setState({
selected: 1
})
}
}

到此,在微信小程序中自定义凸出图标的tabbar就完成了。

taro中自定义tabbar实现中间图标凸出效果的更多相关文章

  1. iOS 自定义Tabbar实现push动画隐藏效果

    http://wonderffee.github.io/blog/2013/08/07/hide-custom-tab-bar-with-animation-when-push/ 在之前的一篇文章(链 ...

  2. Flutter AppBar 自定义顶部导航按钮 图标、颜色 以及 TabBar 定义顶部 Tab 切换

    Flutter AppBar 自定义顶部按钮图 标.颜色 属性 描述 leading 在标题前面显示的一个控件,在首页通常显示应用 的 logo;在其他界面通常显示为返回按钮 title 标题,通常显 ...

  3. AppBar 自定义顶部导航按钮 图标、颜色 以及 TabBar 定义顶部 Tab 切换

    一.Flutter AppBar 自定义顶部按钮图标.颜色 leading   在标题前面显示的一个控件,在首页通常显示应用的 logo:在其他界面通常显示为返回按钮 title  标题,通常显示为当 ...

  4. IOS中如何自定义web应用的图标

    在iPhone/iPad等苹果移动设备上,可以把网站”添加至主屏幕”,添加时的图标可以在HTML中自定义设置图片. 可以使用apple-touch-icon和apple-touch-icon-prec ...

  5. [iOS微博项目 - 1.6] - 自定义TabBar

    A.自定义TabBar 1.需求 控制TabBar内的item的文本颜色(普通状态.被选中状态要和图标一致).背景(普通状态.被选中状态均为透明) 重新设置TabBar内的item位置,为下一步在Ta ...

  6. iOS框架搭建(MVC,自定义TabBar)--微博搭建为例

    项目搭建 1.新建一个微博的项目,去掉屏幕旋转 2.设置屏幕方向-->只有竖向 3.使用代码构建UI,不使用storyboard 4.配置图标AppIcon和LaunchImage 将微博资料的 ...

  7. 自定义tabBar

    ★★★★自定义tabBar★★★★★★★ Demo下载地址:https://github.com/marlonxlj/tabBarCustom.git 前言: 有的时候需求要对tabBar进行自定义的 ...

  8. IOS第二天-新浪微博 - 添加搜索框,弹出下拉菜单 ,代理的使用 ,HWTabBar.h(自定义TabBar)

    ********HWDiscoverViewController.m(发现) - (void)viewDidLoad { [super viewDidLoad]; // 创建搜索框对象 HWSearc ...

  9. iOS开发之功能模块--关于自定义TabBar条

    只上项目中用到的代码: 1.实现重写TabBar的TabBarItem,然后在中间额外加一个按钮. #import <UIKit/UIKit.h> @interface BikeTabBa ...

随机推荐

  1. Python开发个人专属表情包网站

    “表情包”是一种利用图片来表示感情的一种方式.表情包是在社交软件活跃之后,形成的一种流行文化,表情包流行于互联网上面,基本人人都会发表情. 曾经你是否也有过找不到表情包去应对别人的时候. 今天小编分享 ...

  2. mysql字符串相关函数(并与sql server对比)

    https://blog.csdn.net/zhengxiuchen86/article/details/81220779 1.判断子串substr在字符串str中出现的位置 例子:查询']'在‘OP ...

  3. 关于java自学的内容以及感受

    这周主要学习了关于数组方面的知识包括一维数组以及多维数组(他们所储存数据默认值为0),以下为我根据相关知识编写的简单程序: public class test { public static void ...

  4. 重新理解CEO的学习能力----HHR计划----以太入门课--第一课

    一共5个小节. 第一节:开始学习 1,投资人最看重的一点:CEO的学习能力. (因为CEO需要:找优秀的合伙人,需要市场调研,机会判断,组建团队,验证方向,去融资,冷启动,做增长,解决法务,财务,税务 ...

  5. PAT T1024 Currency Exchange Centers

    krustral算法求最少结点数的最小生成树,用优先队列实时排序,优先选择已经被选中的中心~ #include<bits/stdc++.h> using namespace std; ; ...

  6. 【转】Docker学习_本地/容器文件互传(5)

    将容器内文件拷贝到宿主机 docker cp <containerId>:/导出文件的位置/xxx.sql /宿主机的位置 示例:docker cp bf4c4fff338c:/root/ ...

  7. 02-10Android学习进度报告十

    今天我学习了有关ListView的基础知识,主要是学习了其中界面展示的基本方法. 首先看一个简单的列表实现代码: public class Animal { private String aName; ...

  8. LeetCode简单题(一)

    题目一: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组 ...

  9. 分布式事务中间件 TCC-Transaction 源码分析 —— 项目实战

    https://blog.csdn.net/lldouble/article/details/79455172

  10. 执行SQL时出现: ORDER BY clause is not in GROUP BY clause and contains nonaggregated c

    注意: 采用navicat新建数据库时,需要将编码方式设置为,字符集:utf8 -- UTF-8 Unicode ,排序规则:utf8_general_ci 在运行sql语句时,出现以下问题: [Er ...