微信小程序、uniapp自定义底部导航栏(附源码)

news2024/11/24 20:25:25

需求分析
目前开发一套“同城跑腿平台”小程序,面向用户和骑手,需要两个不同的底部导航,uniapp原生导航不满足要求。所以需要自定义导航栏。

随着自定义导航卡完成,切换选项卡页面总是闪烁,在网上也没有搜到完整的解决方法,总不能完美解决。现在我有一个方法,目前完美解决页面闪烁问题,写出来分享。

自定义导航栏
创建导航栏vue文件
首先创建一个commonUserTabBar.vue,这里我创建在pages/common。

html部分:

<template>
  <view class="tab-bar">
    <view v-for="(tab, index) in tabs" :key="index" @click="switchTab(tab)">
      <image :src="currentTab === tab.pagePath ? tab.selectedIconPath : tab.iconPath" mode="aspectFit"></image>
      <text :class="currentTab === tab.pagePath ? 'active' : ''">{{ tab.text }}</text>
    </view>
  </view>
</template>

js代码:

<script>
export default {
  props: {
     currentTab: {
       type: String,
       required: true
     }
   },
  computed: {
    tabs() {
      return [
        {
          pagePath: '/pages/commonUser/index',
          iconPath: '/static/images/commonUserTabbar/home.png',
          selectedIconPath: '/static/images/commonUserTabbar/home_.png',
          text: '首页'
        },
        {
          pagePath: '/pages/commonUser/order',
          iconPath: '/static/images/commonUserTabbar/order.png',
          selectedIconPath: '/static/images/commonUserTabbar/order_.png',
          text: '订单'
        },
        {
          pagePath: '/pages/index',
          iconPath: '/static/images/commonUserTabbar/mine.png',
          selectedIconPath: '/static/images/commonUserTabbar/mine_.png',
          text: '我的'
        }
      ];
    }
  },
  methods: {
    switchTab(tab) {
      uni.reLaunch({
        url: tab.pagePath
      });
    }
  }
};
</script>

其中,currentTab作为父组件传值对象,表示当前选项卡。用 uni.reLaunch进行页面切换。

css样式:

<style>
.tab-bar {
  justify-content: space-around;
  align-items: center;
  height: 120upx;
  background-color: #f7f7f7;
  border-top: 1px solid #e6e6e6;
  position: fixed;
  bottom: 0;
  z-index: 999;
  width: 100%;
  display: flex;
  justify-content: space-around;
  padding-bottom: 30upx;
}

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

.tab-bar image {
  width: 25px;
  height: 25px;
}

.tab-bar text {
  font-size: 12px;
  margin-top: 5px;
}

.tab-bar text.active {
  font-weight: bold;
}
</style>

父组件引用
首先在main.js注册,

import commonUserTabBar from "@/pages/common/commonUserTabBar.vue"//路径根据你的文件修改
Vue.component('commonUserTabBar', commonUserTabBar)

父组件引用,传入当前页面路径。

<commonUserTabBar :currentTab="currentTab"></commonUserTabBar>

data() {
    return {
        //当前选项卡
        currentTab:'/pages/commonUser/index',
    }
},

避免导航栏遮盖内容
在前面我们定义了导航栏高度,所以在正文我们需要定义一个padding-bottom;

.tab-bar {
  ...
  height: 120upx;
}

为了方便全局引用,我将样式定义在app.vue,笔者可根据需求和实际自行定义。

.common-user-p-d-120upx{
  // 设置的120upx是和底部导航栏的高度保持一致,页面的内容就不会被底部导航遮挡住啦
	padding-bottom: 120upx;
}

最后效果:

<view class="common-user-p-d-120upx">
	...
    <commonUserTabBar :currentTab="currentTab"></commonUserTabBar>
</view>

在这里插入图片描述

优化页面闪烁(custom":true)
上文写到,使用 uni.reLaunch切换页面,但是每次切换选项卡时页面都会闪烁,所以我们需要使用uniapp原生的switchTab来切换。

就是在pages.json里设置原生tabbar, 在页面运行的时候 ,将原生tabbar隐藏 进而解决闪烁。其实就是用自定义tabbar外观 用原生tabbar跳转。

说句题外话,HBuilder X真的太烂了,总是有小bug或者编译丢失,搞得以为代码写错,蛮坑蛮浪费时间的。

说回这里,在网上检索,大家都是使用原生tabbar,然后隐藏官方的tabbar,等于是借路。但是这个也有一个弊端。就是每次第一次加载,底部会闪烁两个tabbar,一个你自定义的,一个原生的。而且你光在app.vue全局隐藏还不够,还需要在你第一个显示的页面里隐藏一下才行,有点奇怪。

onLaunch() {
	//隐藏官方的tabBar
	uni.hideTabBar()
}

这里我用"custom":true,来隐藏,从而解决闪烁问题。

“tabBar"中的"custom”: true 表示你想要自定义底部导航栏的样式和内容,而不是使用uni-app默认的底部导航栏。这样,你可以自由地设计底部导航栏的外观和功能,包括图标、文本、颜色等。这样uniapp就不会渲染原生tabbar了,所以也就不会导航栏闪烁了。

pages.json文件,将上面自定义的tabbar路径添加进list。

 "tabBar": {
	...
	"custom":true,//隐藏官方选项卡
    "list": [ {
        "pagePath": "pages/commonUser/order",
        "iconPath": "static/images/commonUserTabbar/order.png",
        "selectedIconPath": "/static/images/commonUserTabbar/order_.png",
        "text": "订单"
      }, {
        "pagePath": "pages/commonUser/index",
        "iconPath": "static/images/commonUserTabbar/home.png",
        "selectedIconPath": "/static/images/commonUserTabbar/home_.png",
        "text": "首页"
      }
    ]
  },

然后将页面切换方法换成uni.switchTab

switchTab(tab) {
  uni.switchTab({
    url: tab.pagePath
  });
}

源码截图:

在这里插入图片描述

说明

如果本项目对您有帮助,欢迎 “点赞,关注” 支持一下 谢谢~

源码获取关注公众号「码农园区」,回复 【uniapp源码】
在这里插入图片描述

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

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

相关文章

性能监控体系:InfluxDB Grafana Prometheus

InfluxDB 简介 什么是 InfluxDB &#xff1f; InfluxDB 是一个由 InfluxData 开发的&#xff0c;开源的时序型数据库。它由 Go 语言写成&#xff0c;着力于高性能地查询与存储时序型数据。 InfluxDB 被广泛应用于存储系统的监控数据、IoT 行业的实时数据等场景。 可配合 Te…

Python安装基础之如何查看python版本、如何查看多个python版本

文章目录 前言最简单的验证手段查看python的路径直接查看python版本默认的python版本就是cmd进入的python关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小…

离散型随机变量的分布律(也称概率质量函数:probability mass function, PMF)

设是一个离散型随机变量&#xff0c;可能的取值为&#xff0c;取各个值的概率记为&#xff1a; &#xff08;1&#xff09; 其中 并且&#xff0c; 公式&#xff08;1&#xff09;就称为离散型随机变量的分布律&#xff0c;也称概率质量函数&#xff1a;probability ma…

Python 进阶(十三):JSON 序列化和反序列化(json 模块)

大家好,我是水滴~~ 本篇文章主要介绍json模块的功能,包括将Python对象序列化到文件、将Python对象序列化为字符串、序列化时类型的对照表、将文件中JSON数据反序列化为Python对象,将JSON字符串反序列化为Python对象、反序列化时类型的对照表等。 文章中包含大量的代码示例…

安防 音响 车载等产品中音频接口选型的高性能国产芯片分析

在人工智能兴起之后&#xff0c;安防市场就成为了其全球最大的市场&#xff0c;也是成功落地的最主要场景之一。对于安防应用而言&#xff0c;智慧摄像头、智慧交通、智慧城市等概念的不断涌现&#xff0c;对于芯片产业催生出海量需求。今天&#xff0c;我将为大家梳理GLOBALCH…

arcgis for js 添加自定义叠加图片到地图坐标点上

在使用arcgis for js开发地图绘制图层时&#xff0c;可以通过相关api实现添加图标到某个坐标点&#xff0c;那么如果现在有一个需要添加一个小图叠大图的需求&#xff0c;又或者是自定义绘制图标&#xff0c;如何实现&#xff1f; 1、简单地绘制一个图标到底图图层上面 const…

[C++] STL_priority_queue(优先级队列) 的使用及底层的模拟实现,容器适配器,deque的原理介绍

文章目录 1、priority_queue1.1 priority_queue的介绍和使用1.2 priority_queue的使用模拟实现&#xff1a; 2、容器适配器2.1 什么是适配器2.2 STL标准库中stack和queue的底层结构 3、deque3.1 deque的原理介绍3.2 deque的缺陷 4、为什么选择deque作为stack和queue的底层默认容…

笔记本电脑word打字延迟特别大,但是浏览器中打字没有延迟,如何解决这个问题。

问题描述&#xff1a; 笔记本电脑word打字延迟特别大&#xff0c;但是浏览器中打字没有延迟&#xff0c;如何解决这个问题。&#xff08;之前以为是自己的电脑用了6年&#xff0c;用的时间久了&#xff0c;硬件老化导致的&#xff0c;本来想直接换电脑的&#xff0c;但是想着去…

计算机毕业设计 基于SpringBoot的电动车租赁系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

Kafka事务是怎么实现的?Kafka事务消息原理详解

目录 一、Kafka事务性消息1.1 介绍Kafka事务性消息1.2 事务性消息的应用场景1.3 Kafka事务性消息的优势 二、Kafka事务性消息的使用2.1 配置Kafka以支持事务性消息生产者配置消费者配置 2.2 生产者&#xff1a;发送事务性消息创建Kafka生产者开始事务发送消息提交或中止事务 2.…

【MySQL】在 Centos7 环境下安装 MySQL

环境搭建 一、检查环境二、检查系统安装包三、安装 mysql yum 源四、安装 mysql 服务五、启动服务六、登录 mysql七、配置 my.cnf 注意&#xff0c;我们搭建的 mysql 环境是在 Linux 的 Centos7 环境下安装的~ 一、检查环境 注意&#xff0c;我们在安装和卸载中&#xff0c;先…

前端面试(5)

1、移动端适配 1.1、设置meta缩放比例&#xff0c;将设备窗口调整为设计图大小。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width,initial-sc…

用到了C语言的函数指针功能。

请选择一个功能&#xff1a; 1. 加法 2. 减法 3. 乘法 4. 除法 5. 取模 6. 阶乘 7. 判断素数 8. 球体体积 9. 斐波那契数列 10. 幂运算 11. 最大公约数 12. 最小公倍数 13. 交换数字 14. 排序 15. 退出 请选择一个选项&#xff1a; #include <stdio.h> #include <stdl…

区块链实验室(31) - 交叉编译Ethereum的客户端Geth

编译Geth到X86架构平台 下载Geth源码&#xff0c;直接编译Geth源码&#xff0c;见下图。用file命令观察编译后的文件&#xff0c;架构是x86-64。 编译Geth到Arm64架构平台 直接用命令行编译&#xff0c;同时指定期望的架构为Arm64。编译脚本如下所示。 CGO_ENABLED0 GOOSlin…

LeetCode力扣每日一题(Java):35、搜索插入位置

一、题目 二、解题思路 1、我的思路&#xff08;又称&#xff1a;论API的重要性&#xff09; 读完题目之后&#xff0c;我心想这题目怎么看着这么眼熟&#xff1f;好像我之前学过的一个API呀&#xff01; 于是我回去翻了翻我之前写的博客&#xff1a;小白备战蓝桥杯&#xf…

JAVA安全之Spring参数绑定漏洞CVE-2022-22965

前言 在介绍这个漏洞前&#xff0c;介绍下在spring下的参数绑定 在Spring框架中&#xff0c;参数绑定是一种常见的操作&#xff0c;用于将HTTP请求的参数值绑定到Controller方法的参数上。下面是一些示例&#xff0c;展示了如何在Spring中进行参数绑定&#xff1a; 示例1&am…

前端知识(十)———JavaScript 使用URL跳转传递数组对象数据类型的方法

目录 首先了解一下正常传递基本数据类型 JavaScript跳转页面方法 JavaScript路由传递参数 JavaScript路由接收参数传递对象、数组 在前端有的时候会需要用链接进行传递参数&#xff0c;基本数据类型的传递还是比较简单的&#xff0c;但是如果要传递引用数据类型就比较麻烦了…

抖音直播匿名采集——协议分析

本文内容仅作学习参考&#xff0c;如侵权&#xff0c;请联系删除。 这次是关于匿名采集的分析&#xff0c;其中会涉及到以下几个只是点&#xff0c;websocket&#xff0c;protobuf&#xff0c;protobuf反序列化。 这里以web端的websocket做分析。 首先你需要将非匿名的代码给…

测试剪切板贴图,兼测试2023年12月7日更新的Bard

当前的情况好比&#xff0c;&#xff08;居然真的可以通过剪切板把图片放进来&#xff01;&#xff09; 听说2023年12月7日Bard有更新&#xff0c;所以&#xff0c;再测试了一次。这下&#xff0c;对大语言模型应该死心了&#xff1b;AI替代人的传闻应该是过早危言耸听了。

基于SpringBoot+Vue前后端分离的景点数据分析平台(Java毕业设计)

大家好&#xff0c;我是DeBug&#xff0c;很高兴你能来阅读&#xff01;作为一名热爱编程的程序员&#xff0c;我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里&#xff0c;我将会结合实际项目经验&#xff0c;分享编程技巧、最佳实践以及解决问题的方法。无论你是…