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的安装或更新都 ...
随机推荐
- nyoj48-小明的调查作业
48-小明的调查作业 内存限制:64MB时间限制:1000msSpecial Judge: No accepted:3submit:4 题目描述: 小明的老师布置了一份调查作业,小明想在学校中请一些同 ...
- 最快理解 - IO多路复用:select / poll / epoll 的区别.
目录 第一个解决方案(多线程) 第二个解决方案(select) 第三个解决方案(poll) 最终解决方案(epoll) 客栈遇到的问题 从开始学习编程后,我就想开一个 Hello World 餐厅,由 ...
- Oracle查看哪些表被锁住了
--查看哪些表被锁住了select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_object ...
- 计算机网络系统--Microsoft Lync 与 腾讯通RTX 对比(转载)
原文网址: http://it.vsharing.com/226.html ------------------------------- 上海大学统一通信平台现在尚未实施,一直在测试微软的Lync. ...
- [SharePoint][SharePoint Designer 入门经典]Chapter12 高级工作流
1.使用Visio2010创建工作流标志 2.使用Visio Graphic服务可视化一个运行的工作流 3.使用InfoPath2010修饰工作流表单 4.导出可重用的工作流
- iOS相册实现与AssetsLibrary框架使用
概述 在iOS中如果想要获取手机相册里面的图片或者视频的话就要用到系统自带的AssetsLibrary框架,AssetsLibrary.framework中包含以下文件 #import <Ass ...
- [笔记][Java7并发编程实战手冊]系列文件夹
推荐学习多线程之前要看的书. [笔记][思维导图]读深入理解JAVA内存模型整理的思维导图文章里面的思维导图或则相应的书籍.去看一遍. 能理解为什么并发编程就会出现故障. Java7并发编程实战手冊 ...
- spring cloud 中Actuator不显示更多信息的处理方式
spring cloud 中Actuator不显示更多信息的处理方式 直接咨询了周大立,他说 management.security.enabled = false 就可以了: 学习了:http:// ...
- rails create方法ActiveModel::ForbiddenAttribute的问题
rails create方法ActiveModel::ForbiddenAttribute的问题 def create @ad = Ad.new(ad_params) @ad.save end pri ...
- mysql设置远程訪问数据库的多种方法
问题:MySQL权限设置正确,但仍无法远程訪问.通过telnet发现3306port未打开. 分析:MySQL默认仅仅绑定127.0.0.1,即:仅仅有在本机才干訪问3306port. 解决:找到My ...