Wepy--小程序自定义底部tabBar
PS后续:
说来惭愧, 没想到这篇文章浏览的人有点多. 说实话写的挺乱的. 并且自定义tabbar还有闪屏的问题.
因为有好几位道友都问了这个问题, 其中一位因为项目很急,所以就研究了一下(也是借鉴大佬的想法), 差不多解决了闪屏的问题.但还是有点小瑕疵.
解决自定义tabbar闪屏的问题, 参考链接: https://developers.weixin.qq.com/community/develop/doc/000c6e038c0ce05413f71e7ce56c04
本人也是前端路上的小白(工作满打满算才 一年半...), 所以写的有什么不对的地方, 还望指出呐.
解决闪屏的代码就直接放压缩包链接了, 需要的话可以下载去借鉴 : https://files.cnblogs.com/files/yk95/wepy-poster-test.zip
运行项目之前, 还是去看一下大佬的文章, 这样思路更清晰.
运行项目, 需要对wepy有所了解, 不了解的可以去查看官方文档,
还有小程序项目的appId需要弄成测试号, 不然这是我的(因为懒,就没删appId),没法跑.
还有, 项目的初始页面得是自定义tabbar页面的其中一个, 也就是在app.json中config下的pages, 不然的话会出问题(否则只能在每个页面去隐藏官方tabbar了) -- 先看参考链接, 先看参考链接, 先看参考链接,
对于下面的文章, 因为写的不好, 并且问题也多, 所以不建议去看了. 可以直接下载代码压缩包,毕竟在编译器上看代码还是最爽的.
因为需求,小程序自带的tabBar不能满足, 所以只能来自己重新写一个. 先看效果图吧
首页:

发现:

消息:

我的:

接下来看代码:
1- 组件-- tabBarBottom.wpy 这里页面也可以用循环来写, 不过就要在样式上再去调整, 我这里没有用循环, 就将就看吧.....
view 中的 c-y 与 c-gray 是公共样式中, 控制图标颜色的切换; 因为这里的图标我用的是阿里云图标, 不是图片, 可以自己替换成图片, 根据 selected 进行图片切换
<template>
<view class="tabBarBox">
<!-- 首页 -->
<navigator class="itemView" url="{{tabBar.list[0].pagePath}}" open-type="redirect" hover-class="none">
<view class="item_icon {{tabBar.list[0].selected ? 'c-y' : 'c-gray'}} {{tabBar.list[0].icon_class}}"></view>
//如果替换成图片 写法 替换图片注意样式, 样式应该要进行调整
//<image class="" src="{{tabBar.list[0].selected ? 'tabBar.list[0].img_act' : 'tabBar.list[0].img'}}">
<view class="item_text {{tabBar.list[0].selected ? 'c-y' : 'c-gray'}}">{{tabBar.list[0].text}}</view>
</navigator>
<!-- 发现 -->
<navigator class="itemView" url="{{tabBar.list[1].pagePath}}" open-type="redirect" hover-class="none">
<view class="item_icon {{tabBar.list[1].selected ? 'c-y' : 'c-gray'}} {{tabBar.list[1].icon_class}}"></view>
<view class="item_text {{tabBar.list[1].selected ? 'c-y' : 'c-gray'}}">{{tabBar.list[1].text}}</view>
</navigator>
<!-- 发布 -->
<view class="addView">
<image class="add_icon" src="../images/add.png"></image>
</view>
<!-- 消息 -->
<navigator class="itemView2 itemView" url="{{tabBar.list[2].pagePath}}" open-type="redirect" hover-class="none">
<view class="item_icon {{tabBar.list[2].selected ? 'c-y' : 'c-gray'}} {{tabBar.list[2].icon_class}}"></view>
<view class="item_text {{tabBar.list[2].selected ? 'c-y' : 'c-gray'}}">{{tabBar.list[2].text}}</view>
</navigator>
<!-- 我的 -->
<navigator class="itemView" url="{{tabBar.list[3].pagePath}}" open-type="redirect" hover-class="none">
<view class="item_icon {{tabBar.list[3].selected ? 'c-y' : 'c-gray'}} {{tabBar.list[3].icon_class}}"></view>
<view class="item_text {{tabBar.list[3].selected ? 'c-y' : 'c-gray'}}">{{tabBar.list[3].text}}</view>
</navigator>
<!-- <view></view> -->
</view>
</template>
<script>
import wepy from 'wepy';
export default class tabBar extends wepy.component {
// props 接收父组件传递过来的值
props = {
// 接收父级传递的tabBar信息
tabBar: {
type: Object,
default: {}
}
} components = { } data = { } onLoad() { } computed = {}
methods = { }
event = {}
}
</script>
<style lang="scss">
.tabBarBox{
width: 100%;
height: 100rpx;
background-color: #fff;
position: fixed;
bottom: 0;
z-index: 9999;
border-top: 1px #afafaf solid;
}
.itemView2{
margin-left: 150rpx;
}
.itemView{
width: 150rpx;
height: 100rpx;
text-align: center;
display: inline-block;
padding-top: 6rpx;
.item_icon{
font-size: 50rpx;
}
.item_text{
font-size: 28rpx;
}
}
.addView{
width: 150rpx;
position: fixed;
bottom: 0;
text-align: center;
display: inline-block;
.add_icon{
width: 120rpx;
height: 120rpx;
}
}
</style>
2- tabBar的数据 , 我放在了启动文件中 app.wpy
globalData = {
userInfo: null,
// tabBar数据
tabBar:{
list: [
{
pagePath: "home",
text: "首页",
icon_class: "iconfont icon-tab-home", //这里用的是阿里图标, 可以替换成图片
selected: true
//图片写法
// img: '未选中的图片路径',
// img_act: '被选中的图片路径'
},
{
pagePath: "find",
text: "发现",
icon_class: "iconfont icon-tab-find",
selected: false
},
{
pagePath: "news",
text: "消息",
icon_class: "iconfont icon-tab-news",
selected: false
},
{
pagePath: "myInfo",
text: "我的",
icon_class: "iconfont icon-tab-my",
selected: false
}
]
}
}
// 处理tabBar中点击, 被点击,将当前的数据对象中 selected 改成true, 其余的就得改成 false; 这里的id是标识, 在调用时手动传入的; id 与 tabBar数组每一个对象索引要对应
tabBarClickHandle(id, that) {
let tbList = this.globalData.tabBar.list;
tbList.forEach((item, index) => {
if (id == index) {
tbList[id].selected = true;
} else {
tbList[index].selected = false;
}
});
that.$apply();
return this.globalData.tabBar;
}
3- 首页中使用组件 剩余的 发现,消息,我的这三个页面中都是这样的用法, 都是这五步, 不过剩余的三个 在第四步中 id要变 发现--id-1 消息--id-2 我的--id-3
<template>
<view id="HomePage">
<view>
// ⑤: 使用组件, 将数据传递给组件
<tabBarBottom :tabBar.sync="tabBarData"></tabBarBottom>
</view>
</view>
</template>
<script>
import wepy from 'wepy';
import tabBarBottom from '@/components/tabBarBottom'; //①:先导入组价
export default class Home extends wepy.page{
config = {
navigationBarTitleText: "首页
}
components = {
tabBarBottom, // ② 声明组件
}
data = {
tabBarData: {}, //③ 组件数据 <传递给组件的>
}
onLoad() {
//④: 获取数据,更新数据 tabBarClickHandle()启动文件中编写的---- 0就是形参id的实参
this.tabBarData = this.$parent.tabBarClickHandle(0, this);
this.$apply();
}
computed = { }
methods = { }
event = { }
}
</script>
慢慢积累,慢慢成长,加油!!
文章中如果有错误,请您指出,我会第一时间去修改;
①:
Wepy--小程序自定义底部tabBar的更多相关文章
- 微信小程序-自定义底部导航
代码地址如下:http://www.demodashi.com/demo/14258.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...
- 小程序自定义底部tab
首页wxml的代码: <view class="nav" hover-class="none"> <view class="inde ...
- 微信小程序自定义底部导航栏组件+跳转
微信小程序本来封装有底部导航栏,但对于想自定义样式和方法的开发者来说,这并不是很好. 参考链接:https://github.com/ljybill/miniprogram-utils/tree/ma ...
- 小程序之底部tabBar
用法简介: 1.app.json中配置下tabBar即可,注意tabBar至少需要两个最多五个Item选项 这里简单列举一些属性值:对于tabBar整体属性设置: 对于tabBar中每个Item属性设 ...
- 微信小程序自定义tabbar的实现
微信小程序自定义tabbar的实现 目的:当采用微信的自定义tabbar组件的时候,切换的时候会出现闪屏的效果:当使用微信默认的tabbar的时候,限制了tabbar的数量以及灵活配置. 方案:自己动 ...
- 微信小程序自定义 tabbar
一定的需求情况下,无法使用小程序原生的 tabbar 的时候,需要自行实现一个和 tabbar 功能一模一样的自制组件. 查阅了海量的博客和文档之后,亲自踩坑.总结了三种在不使用微信小程序原生 tab ...
- 微信小程序把玩(三)tabBar底部导航
原文:微信小程序把玩(三)tabBar底部导航 tabBar相对而言用的还是比较多的,但是用起来并没有难,在app.json中配置下tabBar即可,注意tabBar至少需要两个最多五个Item选项 ...
- 微信小程序自定义TabBar
项目中需要根据用户角色控制TabBar中各Item的显示和隐藏,然而小程序自带TabBar没有提供隐藏某个item的功能,只好自己动手写了一个. 1.wxml文件 <view class=&qu ...
- 快速入门 WePY 小程序【转】
一.WePY介绍 WePY 是 腾讯 参考了Vue 等框架对原生小程序进行再次封装的框架,更贴近于 MVVM 架构模式, 并支持ES6/7的一些新特性. 二.WePY 使用 1.WePY的安装或更新都 ...
随机推荐
- nyoj252-01串
01串 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 ACM的zyc在研究01串,他知道某一01串的长度,但他想知道不含有"11"子串的这种长度的0 ...
- XML文件基础
https://c3d.club/xml/basic/2018/12/27/xml-file-base.html 1.文件头 XML文件头有XML声明与DTD文件类型声明组成.其中DTD文件类型声 ...
- 跳一跳的Python环境搭建
微信最新的小程序里面出了个叫“跳一跳”的小游戏,一经推出立马刷爆了朋友圈,而一些大神们也通过Python实现了自动玩游戏具体代码见(Github地址:https://github.com/wangsh ...
- Fiddler 无法监测WCF通信疑问
别人的可以检测到通信,我的为什么不行呢? 使用的是basicHttp协议,应该可以的啊,着的是非常奇怪
- 建议53:用状态模式美化代码,关于python-state工具包的理解
在<编写高质量代码:改善python程序的91个建议>的建议53:用状态模式美化代码小节中,介绍了状态模式例如以下:就是当一个对象的内在状态改变时,同意改变其行为,但这个对象看起来 ...
- Django -> debug模式下的静态文件服务(/media/)
正式公布django项目的时候,假设存在静态文件(通常会统一放在名称为media或static的文件夹下),则须要建立url到文件系统的映射,比如.使用nginx的时候我们须要进行这种配置. # Dj ...
- C# 监控Windows睡眠与恢复
SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged; private void SystemEvents_PowerModeC ...
- 读配置文件能够保持顺序的 Java Properties 类
序 前几天,公司项目中有一个需求是读取配置文件的.并且最好可以保证载入到内存中的顺序可以和配置文件里的顺序一致,可是.假设使用 jdk 中提供的 Properties 类的话,读取配置文件后.载入到内 ...
- 51NOD 1686 第K大区间 二分
第k大区间 定义一个区间的值为其众数出现的次数.现给出n个数,求将所有区间的值排序后,第K大的值为多少. Input 第一行两个数n和k(1<=n<=100000,k<=n* ...
- Hello The World! —— 致我们无悔的IT之旅
感谢IT,让我有了这么可爱活泼的伙伴. 有了KsCla,Coming,lhx_QAQ,tututu,AB_ever,Fat-zhang,wka,lhm这些伙伴神犇的陪伴,我的OI历程不至于那么枯燥无味 ...