1.选中要创建tabbar组件的目录,右键选定新建Componen

2.然后编写wxml代码和wxss样式

<cover-view class="tab-bar">
<cover-view class="tab-bar-border"></cover-view> <cover-view wx:for="{{list}}" wx:key="index" class="tab-bar-item" data-path="{{item.pagePath}}" bindtap="switchTab">
<block wx:if="{{index === 1}}">
<cover-view class="pub">{{item.text}}</cover-view>
</block> <block wx:else>
<cover-image src="{{selected === index ? item.selectedIconPath : item.iconPath}}"></cover-image>
<cover-view style="color: {{selected === index ? selectedColor : color}}">{{item.text}}</cover-view>
</block>
</cover-view> </cover-view>

这里注意:

<cover-view></cover-view>
<cover-image></cover-image>
这两个组件都表示最上层显示,避免被其他组件覆盖。
 
<block></block>这个组件只是将其他组件框住,并不会被页面渲染。
查看代码
 /* component/tabbar/tabbar.wxss */
.tab-bar {
position: fixed;
bottom: 0;
left: 0;
right: 0;
height: 48px;
background: white;
display: flex;
padding-bottom: env(safe-area-inset-bottom);
} .tab-bar-border {
background-color: rgba(0, 0, 0, 0.33);
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 1px;
transform: scaleY(0.5);
} .tab-bar-item {
flex: 1;
text-align: center;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
} .tab-bar-item cover-image {
width: 27px;
height: 27px;
} .tab-bar-item cover-view {
font-size: 10px;
} .pub{
background-color:dodgerblue ;
height: 80rpx;
width: 80rpx;
border-radius: 50%; display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
}
查看代码
 // component/tabbar/tabbar.js
var app = getApp(); Component({
/**
* 组件的属性列表
*/
properties: {
selected: {
// 默认选中list[0]页面
type:Number,
value:0
},
}, /**
* 组件的初始数据
*/
data: {
color: "#7A7E83", //默认颜色
selectedColor: "#FF3030", // 被选中后的颜色 list: [{
pagePath: "/pages/index/index", // 页面路径
iconPath: "../../static/images/tab/icon_component.png", // 图标路径
selectedIconPath: "../../static/images/tab/icon_component_HL.png", // 被选中后的图片路径
text: "首页"
},
{
text: "发布"
},
{
pagePath: "/pages/home/home",
iconPath: "../../static/images/tab/icon_API.png",
selectedIconPath: "../../static/images/tab/icon_API_HL.png",
text: "我的"
}]
},
/**
* 组件的方法列表
*/
// 前端所需要调用函数,必须得在methods编写
methods: {
switchTab(e) {
var data = e.currentTarget.dataset
console.log(data);
var url = data.path;
if (url) {
wx.switchTab({
url: url
})
} else {
if (app.globalData.userInfo) {
wx.navigateTo({
url: '/pages/publish/publish',
})
} else {
wx.navigateTo({
url: '/pages/auth/auth',
})
}
}
}
}
});

注意:

 wx.switchTab():  只能跳转到 tabbar页面。
wx.navigateTo():   只能跳转到 非tabbar页面。
 
3.其他页面,想要作为tabbar页面,需要在自己的json文件中配置,在wxml中调用。
 
自定义一个组件:并且写上路径。
{
"usingComponents": {
"tabbar":"/component/tabbar/tabbar"
}
}
 
在wxml中调用一下这个组件,并且还可以对selected进行传值,作为list[]中的第几个页面,索引是从0开始的。
注:必须得调用一下自定义编写的组件,不然可能会发生页面无法跳转的尴尬。无论写在最上方或者最下方都可以。
<tabbar selected="{{2}}"></tabbar>

5.需要在全局的app.json中定义:

  "tabBar": {
"custom": true,
}

6.小提示:

  虽然自定义的tabbar,优先度是高过app.json的。

  但并不代表,app.json中的就代码不执行了。

如果你是按照上述方法,自己定义的tabbar,却还是发生了无法跳转tabbar页面的情况。

那就有可能是你所自定义的微信跳转的方法,与app.json中的tabBar:{list:[]} 的某一项发生了冲突,可以尝试删掉那一段试试。

比如:

  你自定义的跳转方法使用的是wx.navigateTo()到A页面,

  而你却在app.json中的tabBar:{list:[]}中配置了A页面的路径。

  这样就会因为wx.navigateTo()只能跳转到非tabbar页面发生了冲突,从而产生不能跳转的缘故。

  只要将A页面中的那一段字典,全部删掉即可。

微信小程序-自定义tabbar配置及注意事项的更多相关文章

  1. 微信小程序自定义 tabbar

    一定的需求情况下,无法使用小程序原生的 tabbar 的时候,需要自行实现一个和 tabbar 功能一模一样的自制组件. 查阅了海量的博客和文档之后,亲自踩坑.总结了三种在不使用微信小程序原生 tab ...

  2. 微信小程序自定义tabbar的实现

    微信小程序自定义tabbar的实现 目的:当采用微信的自定义tabbar组件的时候,切换的时候会出现闪屏的效果:当使用微信默认的tabbar的时候,限制了tabbar的数量以及灵活配置. 方案:自己动 ...

  3. 微信小程序 自定义tabbar实例

    在小程序的开发文档中,对tabbar是这样说明的: 如果小程序是一个多 tab 应用(客户端窗口的底部或顶部有 tab 栏可以切换页面),可以通过 tabBar 配置项指定 tab 栏的表现,以及 t ...

  4. 微信小程序自定义tabbar的问题

    个人感觉小程序的tab样式自定义的能力有所欠缺,不够美观,于是今天自己diy了一个tab 测试的时候发现,无论是使用navigator跳转(会出现点击的效果)还是用bindtap(触摸),因为没有定义 ...

  5. 微信小程序自定义TabBar

    项目中需要根据用户角色控制TabBar中各Item的显示和隐藏,然而小程序自带TabBar没有提供隐藏某个item的功能,只好自己动手写了一个. 1.wxml文件 <view class=&qu ...

  6. 微信小程序 - 自定义tabbar(组件)

    配置项(关于使用组件) index.wxml <!-- tabBar:tabBar配置 activeIndex: 激活页面下标 slots: 多插槽配置(需与页面一致) --> <t ...

  7. 微信小程序 - 自定义tabbar

    更新: 2019-1-18:自定义tabbar组件已发布 各种奇葩的需求,造就了我们 wxml <view class="nav-tabs"> <view cla ...

  8. 解决微信小程序 自定义tabBar 切换时候闪烁问题

    这个闪烁真的很迷 我搜了一些资料,进行了以下步骤的操作 第一种解决办法 ,把tabbar自定义组件的this.setData中的代码注释掉 显示tabbar中的页面中,添加下面的:这个好像没什么用啊 ...

  9. 图文并茂的学习笔记--微信小程序自定义tabbar

    我发现自带的那个tabbar不可以修改样式,没得搞啊,这不行,要改 首先,我们看文档,地址在下面 https://developers.weixin.qq.com/miniprogram/dev/fr ...

  10. 微信小程序 app.json 配置

    我们使用app.json文件来对微信小程序进行全局配置,决定页面文件的路径.窗口表现.设置网络超时时间.设置多 tab 等. 以下是一个包含了所有配置选项的简单配置app.json : { " ...

随机推荐

  1. window 运行 jar包方式

    所有文件 1.将jar包指定为bat批处理文件,然后可以双击启动 新建start2.txt 编辑保存一下内容,修改start2.txt后缀为bat,点击运行(此方法当前命令窗口关闭后,程序也关闭) j ...

  2. Blender如何设置模型中心点

    推荐:将 NSDT场景编辑器 加入你的3D开发工具链. 在使用Blender建模的时候,有时候会导入一些从别的地方**过来的模型,这时候就会遇到一个问题,模型放到场景中时与鼠标放置的位置有一定的偏差, ...

  3. fixed 定位元素超出内容 overflow 不滚动

    假如,一个父元素的定位是 fixed,其所有子元素的高度加起来超过了父元素,父元素设置 overflow: auto.有可能出现不滚动的问题,发生的情况有横向和竖向的. 竖向滚动:必须要设置父元素的高 ...

  4. JavaScript之void

    void是什么 void是JavaScript重要的关键字,该操作符指定要计算一个表达式但不返回. 语法格式: void func() javascript:void func() 或 void (f ...

  5. [C#]为debug添加DebuggerDisplay属性

    最近才发现,DebuggerDisplay 非常弓虽大,给类添加DebuggerDisplay属性后可以让调试变得更简单.如何使用? 1.定义一个有DebuggerDisplay的类:在类的头部添加& ...

  6. RDD编程练习

    一.filter,map,flatmap练习: 1.读文本文件生成RDD lines 2.将一行一行的文本分割成单词 words 3.全部转换为小写 4.去掉长度小于3的单词 5.去掉停用词 6.练习 ...

  7. javascript中的二进制运算符

    javascript的二进制运算符用于直接对二进制位进行计算,好处是速度快,缺点是不直观. 位运算符只对整数起作用,如果一个运算子不是整数,则会转换成整数后再执行;我们都知道javascript的数值 ...

  8. virtualenv指定使用本地某个版本python

    virtualenv -p D:\env\py37_1\Scripts\python3.exe time01 红色的地方是 你本地python解释器的安装路径,后面黄色部分是创建的虚拟环境的名称. 另 ...

  9. 查询redis路径,清除redis缓存

    查询redis路径 1.执行ps -ef | grep redis 命令,结果如下(记住PID) 2.执行ps -u 系统用户名,进一步确定进程id, 我这里的系统用户名是root,执行ps -u r ...

  10. oracle 根据逗号拆分字符串一行转多行

    SELECT A.*, REGEXP_SUBSTR( A.PRODUCTNUMS, '[^,]+', 1, L ) AS PRODUCTNUM,L FROM LG_ZJQH_PRODUCTVALUES ...