微信小程序自定义tabbar栏【中间突出样式】

news2024/11/23 7:25:24

文章目录

  • 前言
  • 一、自定义tabbar栏 配置
  • 二、添加自定义tabbar栏组件
      • 添加组件代码
      • 创建全局字段
      • 在组件中保存重要字段
  • 三、效果展示
  • 总结

前言

昨天主管突然给我说微信小程序默认的 tabBar 不美观,让我改成中间突出的那种样式。纵然我心里面有千般不情愿,但还是接下了这个任务。查了一下文档 自定义 tabBar 发现有这个方法,有思路了就赶紧搞起来,以下是我的开发经验分享。


一、自定义tabbar栏 配置

  • 在 app.json 文件中的 tabBar 中指定 custom 字段为 true(意思是允许使用自定义 tabBar);
  • 在 app.json 中全局开启使用组件,或者在所有涉及的 tab 页 json 中申明usingComponents 项;
  • 在 app.json 中添加作为 tabBar 栏的页面;

示例代码

  "tabBar": {
    "custom": true,
    "color": "#afafaf",
    "selectedColor": "#0099f6",
    "backgroundColor": "#F7F8F8",
    "list": [
      {
        "pagePath": "pages/index/index",
        "text": "首页"
      },
      {
        "pagePath": "pages/goodIndexCopy/goodIndexCopy",
        "text": "易购商城"
      },
      {
        "pagePath": "pages/release/release",
        "text": "发布"
      },
      {
        "pagePath": "pages/nearby/nearby",
        "text": "本地"
      },
      
      {
        "pagePath": "pages/mine/mine",
        "text": "我的"
      }
    ]
  },
  "usingComponents": {},

pagePath 是自己添加的页面,text 是tabBar上展示的文字。

二、添加自定义tabbar栏组件

在根目录下创建 custom-tab-bar 文件夹,并在该文件夹下新建 Component,或者新建 Page,但是这种创建方式需要自己改动一些代码,在这里我们选用新建 Component 的方式。

添加组件代码

1、完善 wxml 文件代码,tabBar 栏需要展示的页面是一个固定的数组,可以使用 wx:for 循环展示,在这里用到 selected 这个字段,这个字段的作用是帮助展示 tabBar 选中和未选中的样式。

<!--custom-tab-bar/index.wxml-->
<view class="tab-bar">
  <view wx:for="{{list}}" wx:key="index" class="tab-bar-item {{item.bulge?'bulge':''}}" data-path="{{item.pagePath}}" data-index="{{index}}" bindtap="switchTab">
    <view  wx:if="item.bulge" class="tab-bar-bulge"></view>
    <image class="image" src="{{selected == index ? item.selectedIconPath : item.iconPath}}"></image>
    <!-- <view  wx:if="{{item.text}}" style="color: {{selected === index ? selectedColor : color}}" class="tab-bar-view">{{item.text}}</view> -->
    <view  class="tab-bar-view" style="color: {{selected === index ? selectedColor : color}}">{{item.text}}</view>
  </view>
</view>

2、完善 js 文件代码,list 数组就是在 tabBar 栏展示的页面信息,switchTab 方法作用可以出看来是负责跳转页面。其它的字段相信各位都知道,这里就不再描述。

  /**
   * 组件的初始数据
   */
  data: {
    selected: 0,
    color: "#afafaf",
    selectedColor: "#0099f6",
    backgroundColor: "#F7F8F8",
    list: [
      {
        pagePath: "/pages/index/index",
        iconPath: "/images/icon/wtc/icon_zhuye2.png",
        selectedIconPath: "/images/icon/wtc/icon_zhuye2_d.png",
        text: "首页",
      },
      {
        pagePath: "/pages/goodIndexCopy/goodIndexCopy",
        iconPath: "/images/icon/wtc/icon_pintuan2.png",
        selectedIconPath: "/images/icon/wtc/icon_pintuan2_d.png",
        text: "易购商城"
      },
      {
        pagePath: "/pages/release/release",
        bulge:true,
        iconPath: "/images/add.png",
        selectedIconPath: "/images/add-active.png",
        text: "发布"
      },
      {
        pagePath: "/pages/nearby/nearby",
        iconPath: "/images/icon/wtc/icon_pintuan3.png",
        selectedIconPath: "/images/icon/wtc/icon_pintuan3_d.png",
        text: "本地",
      },
      {
        pagePath: "/pages/mine/mine",
        iconPath: "/images/icon/wtc/icon_wode3.png",
        selectedIconPath: "/images/icon/wtc/icon_wode3_d.png",
        text: "我的"
      },
    ]
  },
    /**
   * 组件的方法列表
   */
  methods: {
    switchTab(e) {
      // console.log(e);
      const data = e.currentTarget.dataset;
      const url = data.path;
      wx.switchTab({url})
    }
  }

3、完善 wxss 文件代码。

.tab-bar {
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  height: 50px;
  background: #FFF;
  display: flex;
  line-height: 1.2;
  padding-bottom: env(safe-area-inset-bottom);
  border-top: 1px solid #e6e6e6;
}

.tab-bar-item {
  flex: 1;
  text-align: center;
  display: flex;
  justify-content: center;
  align-items: center;
  flex-direction: column;
}

.tab-bar-item .image {
  width: 26px;
  height: 26px;
}
.bulge {
  background-color: #FFF;
}
.bulge .tab-bar-bulge{
  position: absolute;
  z-index: -1;
  width: 64px;
  height: 64px;
  top: -24px;
  border-radius: 50%;
  border-top: 1px solid #e6e6e6;
  background-color: #FFF;
}
.bulge .image{
  position: absolute; 
  width: 50px;
  height: 50px;
  top: -20px;
}
.bulge .tab-bar-view{
  position: relative;
  bottom: -16px;
  margin-top: 4px;
}

.tab-bar-item .tab-bar-view {
  font-size: 12px;
  margin-top: 4px;
}

创建全局字段

做完以上工作之后,我们可以就可以看一下效果了,是不是就以为这样就可以了呢?但是事与愿违,会发现这里存在 bug,在我们点击 tabBar 栏进行跳转的时候会发现页面跳转过去了,但是对应页面的 tabBar 没有改变颜色。为了解决这个 bug,需要添加全局字段。在 app.js 文件中创建该字段。

  globalData: {
    selected: 0
  },

在组件中保存重要字段

全局字段创建完成之后,我们需要在组件 js 文件中使用该字段,在 ready 函数中保存这个字段,在点击 tabBar 栏时,把相应的index 赋值给这个全局字段。

// 引入全局函数
const app = getApp()
Component({
  /**
   * 组件的初始数据
   */
  data: {
    selected: 0,
    color: "#afafaf",
    selectedColor: "#0099f6",
    backgroundColor: "#F7F8F8",
    list: [
      {
        pagePath: "/pages/index/index",
        iconPath: "/images/icon/wtc/icon_zhuye2.png",
        selectedIconPath: "/images/icon/wtc/icon_zhuye2_d.png",
        text: "首页",
      },
      {
        pagePath: "/pages/goodIndexCopy/goodIndexCopy",
        iconPath: "/images/icon/wtc/icon_pintuan2.png",
        selectedIconPath: "/images/icon/wtc/icon_pintuan2_d.png",
        text: "易购商城"
      },
      {
        pagePath: "/pages/release/release",
        bulge:true,
        iconPath: "/images/add.png",
        selectedIconPath: "/images/add-active.png",
        text: "发布"
      },
      {
        pagePath: "/pages/nearby/nearby",
        iconPath: "/images/icon/wtc/icon_pintuan3.png",
        selectedIconPath: "/images/icon/wtc/icon_pintuan3_d.png",
        text: "本地",
      },
      {
        pagePath: "/pages/mine/mine",
        iconPath: "/images/icon/wtc/icon_wode3.png",
        selectedIconPath: "/images/icon/wtc/icon_wode3_d.png",
        text: "我的"
      },
    ]
  },
  ready: function() {
    this.setData({
      selected: app.globalData.selected
    })
  },
  /**
   * 组件的方法列表
   */
  methods: {
    switchTab(e) {
      // console.log(e);
      const data = e.currentTarget.dataset;
      const url = data.path;
      app.globalData.selected = data.index;
      wx.switchTab({url})
    }
  }
})

添加完成后,可以测试一下效果,发现刚才的 bug 已经解决。perfect!!

三、效果展示

在这里插入图片描述

总结

经过了不断探索终于完成了这个功能,事后想了一下还是自己的本事不到家,以后还是需要不断提升自己的能力 ~ ~ ~

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

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

相关文章

python实现算法与数据结构基础-链表、栈、队列、排序算法、二分查找、二叉树

目录1、算法的概念1.1 举例&#xff1a;1.2 算法的五大特性&#xff1a;1.3 时间复杂度1.4 空间复杂度2、数据结构2.1 内存的存储结构2.2 数据结构的分类2.3 顺序表存储方式3、链表3.1链表实现3.2链表的方法3.3链表增加节点3.4链表删除节点3.5链表总结4、栈4.1 栈的介绍4.2 栈的…

负载均衡SLB和LVS的简单介绍

负载均衡 SLB 阿里云SLB(Server Load Balancing&#xff0c;服务器负载均衡)&#xff1a;是阿里云结合自身弹性计算平台的特点以及强大的技术优势&#xff0c;提供的一套软件负载均衡解决方案&#xff0c;以更好的满足弹性计算平台负载均衡的需求。 什么情况下使用SLB? 简单…

2022尚硅谷SSM框架跟学(四)Spring基础一

2022尚硅谷SSM框架跟学.四 Spring基础一Spring1.Spring简介1.1、Spring概述1.2Spring家族1.3Spring Framework1.3.1Spring Framework特性1.3.2Spring Framework五大功能模块2.IOC2.1.IOC容器2.1.1IOC思想(1).获取资源的传统方式(2).反转控制方式获取资源(3).DI2.1.2、IOC容器在…

(02)Cartographer源码无死角解析-(48) 2D点云扫描匹配→扫描匹配基本原理讲解,代码总体框架梳理

讲解关于slam一系列文章汇总链接:史上最全slam从零开始&#xff0c;针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解&#xff1a;https://blog.csdn.net/weixin_43013761/article/details/127350885 文末…

项目管理工具dhtmlxGantt甘特图入门教程(八):数据加载(二)

DhtmlxGantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表&#xff0c;可满足应用程序的所有需求&#xff0c;是最完善的甘特图图表库。 这篇文章给大家讲解如何利用dhtmlxGantt加载任务日期。 DhtmlxGantt正版试用下载&#xff08;qun&#xff1a;764148812&#x…

【Linux】进程状态、优先级和进程切换

大家好我是沐曦希&#x1f495; 文章目录一、操作系统进程1.运行队列2.进程状态二、Linux进程状态三、两个特殊进程1.僵尸进程2.孤儿进程四、进程优先级1.优先级概念2.查看系统进程3.PRI和NI4.nice值的更改5.特性五、进程切换1.并发2.进程如何切换一、操作系统进程 什么是进程…

axios拦截器、ElementUI组件的使用

一、axios拦截器 1、axios模块的作用 是对基于http请求的封装。在浏览器对异步请求对象XMLHttpRequest进行封装 2、拦截器 ​ &#xff08;1&#xff09;请求拦截器&#xff1a;对客户端发起的请求进行统一的前期处理&#xff08;token、时间戳、cookie等&#xff09; ​ …

电脑软件经常出现程序未响应是什么原因?及4种解决方法总结

对于电脑小白来说&#xff0c;电脑经常会出现一下莫名其妙的问题&#xff0c;下面我总结的这些方法可以帮大家排除电脑的问题&#xff0c;让电脑速度如飞。资源不足&#xff1a;如果您的电脑资源不足&#xff0c;比如内存或 CPU 使用率过高&#xff0c;那么程序可能会变得不稳定…

【Linux操作系统】多线程(二)

文章目录4. 线程池5. 单例模式5.1 饿汉模式5.2 懒汉模式6. STL、智能指针和线程安全6.1 STL中的容器是否是线程安全的6.2 智能指针是否是线程安全的6.3 其他常见的各种锁7. 读者写者模型7.1 基本概念7.2 读写锁7.3 基本操作7.4 优先级4. 线程池 介绍 一种线程使用模式。线程过…

论文分享 | MnTTS2: 开源的多说话人蒙古语TTS数据集

本次分享内蒙古大学蒙古文信息处理重点实验室、蒙古文智能信息处理技术国家地方联合工程研究中心及语音理解与生成实验室 (S2LAB) 共同发布的开源多说话人蒙古语语音合成数据集及其基线模型。相关论文《MnTTS2: An Open-Source Multi-Speaker Mongolian Text-to-Speech Synthes…

【Java编程进阶】Java异常详解

推荐学习专栏&#xff1a;Java 编程进阶之路【从入门到精通】&#xff0c;从入门到就业精通&#xff0c;买不了吃亏&#xff0c;买不了上当&#xff01;&#xff01; 文章目录1. 异常2. 异常的体系3. Error4. 异常产生的过程5. throw 关键字6. 异常处理6.1 throws 关键字6.2 tr…

基于Node.js和vue的师生互助平台

摘 要随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&am…

Jetpack Compose中的软键盘与焦点控制

FocusRequester 与 FocusManager 在 Compose 中&#xff0c;可以通过 FocusRequester 与 FocusManager 这两个对象可以主动在代码中控制焦点获取和取消焦点&#xff0c;其中FocusRequester可以用来获取焦点&#xff0c;通过调用它的requestFocus()方法来实现&#xff0c;而 Fo…

脚手架搭建Vue项目

以上创建的方式发现一直存在config目录 换种方式 卸载脚手架命令 npm uninstall vue-cli -g 重新安装 npm install vue/cli -g 1.vue create 项目名 2.模板选择&#xff0c;通过键盘上下键来选择&#xff0c;我们选择第三个 自定义 这三个选择分别是 vue2 / vue3 默认模板…

12.Isaac教程--未来工厂中的搬运车

未来工厂中的搬运车 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 文章目录未来工厂中的搬运车运行模拟器搬运车送货申请自动小车运输的行为树导航与感知互通仅限自主导航申请仅适用于感知训练模型物体检测模型&#xff08;DetectNetv2&#x…

JSP SSM家教管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 JSPSSM家教管理系统 是一套完善的系统源码&#xff0c;对理解JSP java SrpingMVC mybiats 框架 MVC编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;以及相应配套的设计文档&#xff0c;系 统主要采用B/S模式开发。 研究的基本内容…

5.5、TCP 的拥塞控制

在某段时间若对网络中某一资源的需求超过了该资源所能提供的可用部分&#xff0c;网络性能就要变坏\color{red}对网络中某一资源的需求超过了该资源所能提供的可用部分&#xff0c;网络性能就要变坏对网络中某一资源的需求超过了该资源所能提供的可用部分&#xff0c;网络性能就…

CSDN第22场周赛

1.写在前面的话22场周赛的详情总比赛第7名了&#xff0c;hhhCSDN周赛非常能够锻炼码代码的能力&#xff0c;无论是在平常的练习题目当中&#xff0c;还是每次的周赛中&#xff0c;题目有难有易&#xff0c;每次周赛的题目出的十分具有代表性&#xff0c;参加了将近20场的周赛&a…

批量PDF文件合并用什么软件?这两个宝藏软件赶快收藏起来

我们在工作中经常有很多处理过的PDF文件&#xff0c;我们经常会将这些文件进行保存&#xff0c;以防日后需要使用&#xff0c;但是太多的PDF文件真的会占用很多存储空间&#xff0c;所以我们可以将各类PDF文件合并在一起&#xff0c;这样也方便以后观看&#xff0c;但是逐个合并…

Docker容器实时日志查看器Dozzle

什么是 Dozzle&#xff1f; Dozzle 是一个小型轻量级应用程序&#xff0c;具有基于 Web 的界面来监控 Docker 日志。Dozzle不存储任何日志文件&#xff0c;仅用于实时监控您的容器日志。 先看个官方的动图 老苏已转成了视频&#xff0c;源文件地址&#xff1a;https://github.c…