uniApp开发小程序自定义tabBar底部导航栏+tabBar中间凸起自定义样式实现

        先看效果是否可以满足你们,如果可以满足你只要一步一步照着做绝对没有错。

        本人技术不佳,研究了一整天,全网的大佬们写的博客看的晕头转向,避免大伙再走弯路,跟着我以下步骤一点一点来绝对可以实现。

        最终效果图: (如果你看着还满意的话那就跟着教程一步一步来吧)

首先你要确保你的项目中安装了 uview的UI框架和vuex,具体安装教程这两个网上都有详细教程,我这项目是Vue3.0的,用的是uview-plus框架。

第一步:配置信息

pages.js 添加 "custom": true 属性

第二步:添加自定义tabBar代码文件

注意:这里是按官方要求必须放在项目根目录下,而且文件名不能修改,index中代码如下:

<template><view><u-tabbar :value="index" @change="tabBarChange" :fixed="true" :placeholder="true" :safeAreaInsetBottom="true"activeColor="#d81e06"><u-tabbar-item text="首页"><template #active-icon><image class="u-page__item__slot-icon" :src="list[0].selectedIconPath"></image></template><template #inactive-icon><image class="u-page__item__slot-icon" :src="list[0].iconPath"></image></template></u-tabbar-item><u-tabbar-item text="转让"><template #active-icon><image class="u-page__item__slot-icon" :src="list[1].selectedIconPath"></image></template><template #inactive-icon><image class="u-page__item__slot-icon" :src="list[1].iconPath"></image></template></u-tabbar-item><u-tabbar-item @click="show = true"><template #active-icon><image class="u-page__item__slot-icon-big" :src="list[2].selectedIconPath"></image></template><template #inactive-icon><image class="u-page__item__slot-icon-big" :src="list[2].iconPath"></image></template></u-tabbar-item><u-tabbar-item text="积分"><template #active-icon><image class="u-page__item__slot-icon" :src="list[3].selectedIconPath"></image></template><template #inactive-icon><image class="u-page__item__slot-icon" :src="list[3].iconPath"></image></template></u-tabbar-item><u-tabbar-item text="我的"><template #active-icon><image class="u-page__item__slot-icon" :src="list[4].selectedIconPath"></image></template><template #inactive-icon><image class="u-page__item__slot-icon" :src="list[4].iconPath"></image></template></u-tabbar-item></u-tabbar><view><u-popup :overlayOpacity="0.6" :round="10" :show="show" @close="close" @open="open"><view class="issue-item"><view class="issue-item-buy" @click="toBuy"><text>我要卖</text></view><view class="issue-item-sell"><text>我要买</text></view></view></u-popup></view></view>
</template><script>export default {data() {return {show: false,list: [{"pagePath": "/pages/index/index","text": "首页","iconPath": "/static/tabs/home_default.png","selectedIconPath": "/static/tabs/home_selected.png"},{"pagePath": "/pages/makeOver/makeOver","text": "转让","iconPath": "/static/tabs/mass_default.png","selectedIconPath": "/static/tabs/mass_selected.png"},{"pagePath": "/pages/issue/issue","text": "发布","iconPath": "/static/images/tab_issue.png","selectedIconPath": "/static/images/tab_issue.png"},{"pagePath": "/pages/integral/integral","text": "积分","iconPath": "/static/tabs/mass_default.png","selectedIconPath": "/static/tabs/mass_selected.png"},{"pagePath": "/pages/my/my","text": "我的","iconPath": "/static/tabs/my_default.png","selectedIconPath": "/static/tabs/my_selected.png"}]}},computed: {index() {return this.$store.state.tabbarIndex}},methods: {tabBarChange(e) {if (e !== 2) {uni.switchTab({url: this.list[e].pagePath})}},//点击发布按钮的弹出层open() {console.log('open');},close() {this.show = false;console.log('close');},//点击我要卖toBuy() {console.log("点击了");uni.switchTab({url: '/pages/issue/issue'})}}}
</script><style lang="scss">.u-page__item__slot-icon {width: 50rpx;height: 50rpx;}.u-page__item__slot-icon-big {width: 120rpx;height: 120rpx;margin-bottom: 30rpx;}.issue-item {height: 400rpx;display: flex;justify-content: center;align-items: center;.issue-item-buy,.issue-item-sell {width: 30%;height: 100rpx;font-size: 28rpx;border-radius: 20rpx;background-color: pink;margin: 40rpx;line-height: 100rpx;text-align: center;}}
</style>

 下面我给大家先讲讲实现的逻辑,首先逛了一天的博客,有的人用for循环来做,刚开始我也用循环,但是我中间有个凸起的发布按钮,我想做出点击后有弹出层,然后再选择的功能,按照网上他们说的去做都直接跳转了,我这点击发布效果如下图:  没办法我只能我只有会写死,反正后面这个换的也不是太频繁。

我再讲讲代码中需要注意的点吧,首先 如下图的value值我绑定的computed计算属性中的index,然后methods中的tabBarChange方法呢是点击tabBar切换的每一项,下面我又加个if判断就是用来控制中间发布的那个图标点击后不跳转

 

 以上配置好后,那就在每一个跳转页配一下代码,作用是用来更store中的changgeTabbarIndex的值,也就是确保页面跳转后,图标选中你所点击的那个页面,我这里每个页面都配置了一下。代码如下:

		onShow() {this.$store.commit('changeTabbarIndex', 1)},

第三步:安装配置vuex

 首先说为什么要安装vuex,因为通过vuex来实现组件和组件之间数据传递,当你点击不同tabBar来回切换的时候把对应的值存在store中。

安装命令:npm install vuex --save

配置vuex:项目根目录下新建 store/index.js文件,代码如下:

import {createStore
} from 'vuex'const store = createStore({//全局状态state: {tabbarIndex: 0,},//同步的方法,commitmutations: {changeTabbarIndex(state, index) {state.tabbarIndex = index;console.log('uvexIndex',state.tabbarIndex);}},//异步的方法 dispatchactions: {}
})export default store

第四步:配置主入口文件

 到这里就已经完成了,这是本人第一个小程序项目,希望能给新手们带来点帮助,欢迎大佬们前来批评指正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/659758.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

万兆电口模块10GBase-T:提升网络性能的利器

随着数字化时代的到来&#xff0c;数据传输速度已经成为各行各业不可或缺的一项需求。而在数据中心和企业网络中&#xff0c;网络设备也正面临着越来越高的带宽需求。在满足这一需求的过程中&#xff0c;万兆电口模块10GBase-T成为了一种重要的解决方案。本文将围绕万兆电口模块…

工作七年,对消息推送使用的一些经验和总结

前言&#xff1a;不管是APP还是WEB端都离不开消息推送&#xff0c;尤其是APP端&#xff0c;push消息&#xff0c;小信箱消息&#xff1b;WEB端的代办消息等。因在项目中多次使用消息推送且也是很多项目必不可少的组成部分&#xff0c;故此总结下供自己参考。 一、什么是消息推…

最短路径 ( floyd) 算法

Floyd算法又称为插点法&#xff0c;是一种用于寻找给定的加权图中多源点之间最短路径的算法。 算法思想: https://upimg.baike.so.com/doc/5450540-5688910.html 图演示: 代码实现: public void floyd() {int[] vertex graph.getVertex();int[][] edges graph.getEdges()…

<网络安全>《12 数据库安全审计系统》

1 概念 数据库安全审计系统通过对用户访问数据库行为的记录、分析和汇报&#xff0c;来帮助用户事后生成合规报告、事故追根溯源&#xff0c;同时通过大数据搜索技术提供高效查询审计报告&#xff0c;定位事件原因&#xff0c;以便日后查询、分析、过滤&#xff0c;实现加强内…

【算法】拦截导弹(线性DP)

题目 某国为了防御敌国的导弹袭击&#xff0c;发展出一种导弹拦截系统。 但是这种导弹拦截系统有一个缺陷&#xff1a;虽然它的第一发炮弹能够到达任意的高度&#xff0c;但是以后每一发炮弹都不能高于前一发的高度。 某天&#xff0c;雷达捕捉到敌国的导弹来袭。 由于该系…

VUE3+elementPlus 之 Form表单校验器 之 字符长度校验

需求&#xff1a;校验字符长度&#xff0c;超过后仍可输入&#xff0c;error提示录入字符数与限制字符数 校验字符长度&#xff1a; /*** 检验文字输入区的长度* param {*} rule 输入框的rule 对象&#xff0c;field&#xff1a;字段名称* param {*} value …

【百度Apollo】本地调试仿真:加速自动驾驶系统开发的利器

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《linux深造日志》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下…

Unity | 资源热更(YooAsset AB)

目录 一、AssetBundle 1. 插件AssetBundle Browser 打AB包 &#xff08;1&#xff09;Unity&#xff08;我用的版本是2020.3.8&#xff09;导入AssetBundle Browser &#xff08;2&#xff09;设置Prefab &#xff08;3&#xff09;AssetBundleBrowser面板 2. 代码打AB包…

nodejs历史版本下载

Node.js — Previous Releases下载地址 .msi 是安装包&#xff08;windows&#xff09;&#xff0c;下载安装包即可

关于最小系统板PCB设计后的一些反思

简介 趁着刚刚画完板子寄回来&#xff0c;在这里做一些记录。 板子状况 这里打烊了5块PCB&#xff0c;但是没有进行SMT贴片&#xff0c;后续如果有芯片可以焊接上去进行后续验证。 封装问题 这里可以看到&#xff0c;我这里两侧的排针都是焊盘&#xff0c;不是通孔&#…

Unity_Timeline使用说明

Unity_Timeline使用说明 首先要找到工具吧&#xff1f;Unity2023.1.19f1c1打开如下&#xff1a; &#xff08;团结引擎没找见哪儿打开&#xff0c;可能是引擎问题吧&#xff1f;有知道的同学可以告诉我在哪儿打开&#xff09; Timelime使用流程&#xff1a; 打开之后会提示您…

ClickHouse为什么这么快(二)SSE指令优化

上一篇 ClickHouse为什么这么快&#xff08;一&#xff09;减少数据扫描范围 我们说到了ClickHouse中使用列存储&#xff0c;每个列都单独存储为一个文件&#xff0c;每个文件都是由一个或多个数据块组成&#xff0c;也就是说&#xff1a;每个文件由一个或多个数组组成&#xf…

3分钟阅读100篇文献?GPT可以做到!

摘要和背景 PPMAN-AI 01 在开始深入阅读之前&#xff0c;了解文献的主题和背景是非常重要的。这可以帮助你快速判断该文献是否符合你的研究需求。 prompt&#xff1a; 请简述文献[文献标题]的摘要。 解释文献[文献标题]中提到的研究背景。 文献[文献标题]的主要研究目的是什…

WordPress块编辑器(Gutenberg古腾堡)中如何添加脚注?

WordPress默认自带的块编辑器​&#xff08;Gutenberg古腾堡编辑器&#xff09;本身就自带添加脚注功能&#xff0c;不过经典编辑器不行。如果想要在WordPress中添加更加专业的脚注&#xff0c;建议使用Modern Footnotes插件&#xff0c;具体介绍及使用请参考『WordPress站点如…

【计算机图形】几何(Geometry)和拓扑(Topology)

目录 参考文献三维实体建模内核CSG/BREPParasolid简介Parasolid接口函数Parasolid类的结构 Parasolid数据分类&#xff1a;几何(Geometry)和拓扑(Topology)拓扑(Topology)什么是“拓扑”呢&#xff1f;Principle Geometry- Topology - Construction Geometry案例&#xff1a;拓…

ElementUI Form:Switch 开关

ElementUI安装与使用指南 Switch 开关 点击下载learnelementuispringboot项目源码 效果图 el-switch.vue 页面效果图 项目里el-switch.vue代码 <script> export default {name: el_switch,data() {return {value: true,value1: true,value2: true,value3: 100,value…

MFC串行化的应用实例

之前写过一篇MFC串行化的博文;下面看一个具体例子; 新建一个单文档应用程序;在最后一步,把View类的基类改为CFormView; 然后在资源面板编辑自己的字段; 然后到doc类的头文件添加对应变量, public:CString name;int age;CString sex;CString dept;CString zhiwu;CStrin…

蓝桥杯2024/1/31----第十届省赛题笔记

题目要求&#xff1a; 1、 基本要求 1.1 使用大赛组委会提供的国信长天单片机竞赛实训平台&#xff0c;完成本试题的程序设计 与调试。 1.2 选手在程序设计与调试过程中&#xff0c;可参考组委会提供的“资源数据包”。 1.3 请注意&#xff1a; 程序编写、调试完成后选手…

JAVA Web 学习(二)ServLet

二、动态web 资源开发技术——Servlet Servlet&#xff08;小服务程序&#xff09;是一个与协议无关的、跨平台的Web组件&#xff0c;由Servlet容器所管理。运行在服务器端&#xff0c;可以动态地扩展服务器的功能&#xff0c;并采用“请求一响应”模式提供Web服务。 Servlet的…

将java对象转换为json字符串的几种常用方法

目录 1.关于json 2.实现方式 1.Gson 2.jackson 3.fastjson 3.与前端的联系 1.关于json JSON是一种轻量级的数据交换格式。它由Douglas Crockford在2001年创造。JSON的全称是JavaScript Object Notation&#xff0c;它是一种文本格式&#xff0c;可以轻松地在各种平台之间传…