uni-app自定义tabBar;uni-app小程序自定义tabBar;uni-app小程序修改中间tabBar导航栏大小;uni-app中间导航栏凸起;uni-app修改底部导航栏

需求:要求小程序,中间的tabBar自定义凸起或者图标变大;
问题:查看uni-app的tabBar文档可知,小程序是不支持midButton的;

解决思路:隐藏uni-app原有的tabBar,然后换成自己手写的导航栏,进行定位和自定义样式;

小程序页面截图:

在这里插入图片描述

H5页面截图:
在这里插入图片描述

步骤和文件结构如下:

在这里插入图片描述

一、pages.json:正常书写,注意H5的需要加上midButton部分

{"pages": [{"path": "pages/index/index","style": {"navigationBarTitleText": "uni-app"}},{"path": "pages/midell/index","style": {"navigationBarTitleText": "midell"}},{"path": "pages/mine/index","style": {"navigationBarTitleText": "mine"}}],"globalStyle": {"navigationBarTextStyle": "black","navigationBarTitleText": "uni-app","navigationBarBackgroundColor": "#F8F8F8","backgroundColor": "#F8F8F8","app-plus": {"background": "#efeff4"}},"tabBar": {"color": "#999999","selectedColor": "#f00","borderStyle": "black","backgroundColor": "#ffffff","midButton": {"text": "中间","pagePath": "pages/midell/index","iconPath": "static/api.png","selectedIconPath": "static/apiHL.png"},"list": [{"pagePath": "pages/index/index","iconPath": "static/template.png","selectedIconPath": "static/templateHL.png","text": "简介"},{"pagePath": "pages/midell/index","iconPath": "static/api.png","selectedIconPath": "static/apiHL.png","text": "中间"},{"pagePath": "pages/mine/index","iconPath": "static/component.png","selectedIconPath": "static/componentHL.png","text": "我的"}]}
}

二、添加公共组件midell-box页面,在里面写上自定义导航栏和样式;(注意:公共组件要符合easycom规范 无需引入直接使用)

逻辑:调用uni.hideTabBar()去除原生导航栏,再根据 centerItem: true ,控制特殊样式

midell-box.vue:可直接复制(注意你的导航栏图片路径)
在这里插入图片描述

<template><view class="tabbar-container"><block><!-- 针对中间的导航栏  通过true来判断控制类名和样式 --><view class="tabbar-item" v-for="(item, index) in tabbarList" :class="[item.centerItem ? 'center-item' : '']" @click="changeItem(item)" :key="index"><view class="item-top"><image :src="currentItem == item.id ? item.selectIcon : item.icon"></image></view><!-- 通过三元判断控制类名 达到控制选中和未选中的样式 --><view class="item-bottom" :class="[currentItem == item.id ? 'item-active' : '']"><text>{{ item.text }}</text></view></view></block></view>
</template><script>
// 组件的书写符合easycom规范 无需引入直接使用
export default {props: {currentPage: {type: Number,default: 0}},data () {return {currentItem: 0,tabbarList: [{id: 0,path: '/pages/index/index',icon: '/static/template.png',selectIcon: '/static/templateHL.png',text: '首页',centerItem: false},{id: 1,path: '/pages/midell/index',icon: '/static/api.png',selectIcon: '/static/apiHL.png',text: '中间',// 通过类名class控制样式大小centerItem: true},{id: 2,path: '/pages/mine/index',icon: '/static/component.png',selectIcon: '/static/componentHL.png',text: '我的',centerItem: false}]}},mounted () {this.currentItem = this.currentPage// 隐藏原来的tabBar导航栏uni.hideTabBar()},methods: {changeItem (item) {let _this = this//_this.currentItem = item.id;uni.switchTab({url: item.path})}}
};
</script>
<style lang="less" scope>
view {padding: 0;margin: 0;box-sizing: border-box;
}
.tabbar-container {position: fixed;bottom: 0rpx;left: 0rpx;width: 100%;height: 110rpx;box-shadow: 0 0 5px #999;display: flex;align-items: center;padding: 5rpx 0;color: #999999;/* 针对tabbar的统一处理 */.tabbar-item {width: 33.33%;height: 100rpx;display: flex;flex-direction: column;justify-content: center;align-items: center;text-align: center;.item-top {width: 70rpx;height: 70rpx;padding: 10rpx;image {width: 100%;height: 100%;}}// 未被选中的导航栏字体.item-bottom {font-size: 28rpx;width: 100%;}// 被选中的导航栏字体.item-active {color: #f00;}}// 最中间的tabbar导航栏.center-item {display: block;position: relative;.item-top {flex-shrink: 0;width: 100rpx;height: 100rpx;position: absolute;top: -50rpx;left: calc(50% - 50rpx);border-radius: 50%;box-shadow: 0 0 5px #999;background-color: rgb(240, 63, 131);}.item-bottom {position: absolute;bottom: 5rpx;}.item-active {position: absolute;bottom: 5rpx;color: #1fff;}}
}
</style>

三、在每个导航栏页面 引入公共组件

<midell-box :current-page="0"></midell-box>

注意current-page的值和公共组件的参数内 id对应
在这里插入图片描述

四、如果想要将中间的按钮,点击弹起二级菜单,可以修改公共组件midell-box,去掉点击中间按钮的path,监听这个点击事件后,打开弹框,在弹框内点击对应的按钮跳转到对应的页面。

下方的中间按钮做了二级菜单弹框,但是点击跳转的页面没写,故没有让其跳转页面,可以自己加。

在这里插入图片描述

点赞收藏吧!

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

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

相关文章

uni-app小程序 点击页面滚动到指定位置

uni.pageScrollTo({scrollTop: 0,duration: 300,})

mysql Connector C/C++ 多线程封装

From: http://blog.csdn.net/educast/article/details/14163519 在网上找了好久&#xff0c;有很多封装&#xff0c;但是感觉对多线程处理的不多&#xff0c;都不是很理想。封装完的第一个版本&#xff0c;想法比较简单&#xff0c;使用一个单例模式&#xff0c;对应一个连接&a…

uni-app微信小程序image引入图片;background-image背景图引入图片;小程序预览本地图片;小程序图片过大引入报错;获取本地图片的网络地址;

uni-app小程序图片使用有image标签和background-image背景图两种方式&#xff1a; 下有获取本地图片的网络地址方式&#xff1a;见第四步 一、方式一&#xff1a;使用image标签引入&#xff1a; uni-app官方image 1.官方文档说&#xff1a;src 仅支持相对路径、绝对路径&…

微商小程序加人加粉推广平台二维码

微商加人推广平台丨微商加粉推广平台丨微商拼团丨微商产品推广。

JS node 后端签名前端文件直传ali-oss解决方案

1&#xff1a;首先打开跨域 上面搞好了开始写代码 html <input type"file" id"upload" onchange"uploadfile()"> js function uploadfile() {var file document.getElementById(upload).files[0]$.ajax({url: /policy,data: ,type: get…

【MCAL】TC397+EB-treso之MCU配置实战 - 芯片时钟

本篇文章介绍了在TC397平台使用EB-treso对MCU驱动模块进行配置的实战过程&#xff0c;主要介绍了后续基本每个外设模块都要涉及的芯片时钟部分&#xff0c;帮助读者了解TC397芯片的时钟树结构&#xff0c;在后续计算配置不同外设模块诸如通信速率&#xff0c;定时器周期等&…

ubuntu下安装、卸载软件

2019独角兽企业重金招聘Python工程师标准>>> 安装&#xff1a;(1) apt-get install name 卸载&#xff1a;(1) apt-get remove name 卸载并清除配置&#xff1a;(1) apt-get remove --purge name 更新信息库&#xff1a;apt-get update 系统升级&#xff1a;apt-get…

英文版Ubuntu 安装中文输入法

一、安装语言包 &#xff08;系统默认会安装中文简体语言包&#xff09; System Settings-->Language Support-->Install/Remove Languages 二、安装IBUS框架 sudo apt-get install ibus ibus-clutter ibus-gtk ibus-gtk3 ibus-qt4 三、安装中文引擎 Ibus 拼音&#xff1…

console使用

console.log用于控制台打印&#xff1b;但除此之外console还有很多用处 1.分组打印console.group(分组打印1-2)console.log(1);console.log(2);console.groupEnd()console.group(分组打印3-4)console.log(3);console.log(4);console.group(俄罗斯套娃)console.log(5);console.…

Linux平台上搭建apache+tomcat负载均衡集群

传统的Java Web项目是通过tomcat来运行和发布的。但在实际的企业应用环境中&#xff0c;采用单一的tomcat来维持项目的运行是不现实的。tomcat 处理能力低&#xff0c;效率低&#xff0c;承受并发小&#xff08;1000左右&#xff09;。当用户请求较少时&#xff0c;单一的tomca…

(转)C#中 DirectoryEntry组件应用实例

C#中 DirectoryEntry组件应用实例DirectoryEntry类封装Active Directory层次结构中的节点或对象&#xff0c;使用该类可以绑定到对象&#xff0c;或者读取和更新属性。图1所示为DirectoryEntry组件。DirectoryEntry组件1&#xff0e; 功能DirectoryEntry类封装Active Director…

【Linux学习】epoll详解

From: http://blog.csdn.net/xiajun07061225/article/details/9250579 什么是epoll epoll是什么&#xff1f;按照man手册的说法&#xff1a;是为处理大批量句柄而作了改进的poll。当然&#xff0c;这不是2.6内核才有的&#xff0c;它是在2.5.44内核中被引进的(epoll(4) is a …

Windows Server Backup 2012设置备份周期

Windows Server Backup 2012设置备份周期 作者&#xff1a;杨坚 Windows Server Backup 概述 Windows Server Backup 功能提供一组向导及其他工具&#xff0c;您可用来对服务器执行基本的备份和恢复任务。自首次发布 Windows Server 2008 以来&#xff0c;此功能已得到更新。另…

JSP作业1--5!

输出5的阶乘 <body> <!-- 5的阶乘--> <% int s1; for(int j1;j<6;j){ %> <%s*j; %><% }%> <br> 5的阶乘是&#xff1a; <%s %> 结果&#xff1a; 转载于:https://www.cnblogs.com/miss123/p/5611038.html

Yii Zii.widgets.Cmenu 操作

为什么80%的码农都做不了架构师&#xff1f;>>> $this->widget(zii.widgets.CMenu, array( activeCssClass>当前热点元素的样式, firstItemCssClass>第一个元素的样式, lastItemCssClass>最后一个元素的样式, encodeLable>false //這樣&#xff…

比较分析 Spring AOP 和 AspectJ 之间的差别

比较分析 Spring AOP 和 AspectJ 之间的差别 英文原文&#xff1a;Comparative Analysis Between Spring AOP and AspectJ 标签&#xff1a; AspectJ Spring158人收藏此文章, 我要收藏oschina 推荐于 3年前 (共 7 段, 翻译完成于 10-24) (19评) 参与翻译(2人)&#xff1a; bear…

微信小程序打开pdf文件;uni-app下载打开pdf文件;uni-app微信小程序下载打开pdf文件预览;

1.首先需要在小程序后台-开发设置-服务器域名 配置好下载的域名。不配置&#xff1a;会导致下载失败和打开文件失败&#xff1b; 2.pdf文件的url要确保可以浏览器直接打开。 <template><view class"pdf"><view v-for"(item,index) in pdfList&q…

Dynamips结合VMware搭建站点到站点×××环境

Dynamips是现如今最好的思科模拟器&#xff0c;它能够加载的思科IOS&#xff0c;模拟出真实的路由器&#xff0c;这使得我们在没有思科设备的情况下也能很好的学习&#xff0c;Dynamips的强大之处不仅于此&#xff0c;它还能与我们的VMware虚拟机&#xff0c;甚至和真机实行互连…