uniapp自定义tabbar,中间凸起(支持H5、微信小程序)

2023-11-11

 最近公司需要做一款app,需要中间按钮凸起,在网上找了一些,参考文献,做了一个demo;

H5效果图如下:

小程序效果图如下: 

目录结构如下:

 

page.json的配置如下:

{
	"pages": [{
		"path": "pages/index/index",
		"style": {
			"navigationBarTitleText": "简介"
		}
	}, {
		"path": "pages/discount/discount",
		"style": {
			"navigationBarTitleText": "优惠"
		}

	}, {
		"path": "pages/code/code",
		"style": {
			"navigationBarTitleText": "二维码"
		}

	}, {
		"path": "pages/search/search",
		"style": {
			"navigationBarTitleText": "探索"
		}

	}, {
		"path": "pages/mine/mine",
		"style": {
			"navigationBarTitleText": "我的"
		}

	}],
	"globalStyle": {
		"navigationBarTextStyle": "black",
		"navigationBarTitleText": "CRM",
		"navigationBarBackgroundColor": "#F8F8F8",
		"backgroundColor": "#F8F8F8",
		"app-plus": {
			"background": "#efeff4"
		}
	},
	"tabBar": {
		"color": "#999999",
		"selectedColor": "#f00",
		"borderStyle": "black",
		"backgroundColor": "#ffffff",
		"midButton":{
			"text":"二维码",
			"pagePath":"pages/code/code",
			"iconPath":"static/code.png",
			"selectedIconPath":"static/codeSelected.png"
		},
		"list":[
			{
				"pagePath":"pages/index/index",
				"iconPath":"static/home.png",
				"selectedIconPath":"static/homeSelected.png",
				"text":"简介"
			},
			{
				"pagePath":"pages/discount/discount",
				"iconPath":"static/gift.png",
				"selectedIconPath":"static/giftSelected.png",
				"text":"优惠"
			},
			{
				"pagePath":"pages/code/code",
				"iconPath":"static/code.png",
				"selectedIconPath":"static/codeSelected.png",
				"text":"二维码"
			},
			{
				"pagePath":"pages/search/search",
				"iconPath":"static/search.png",
				"selectedIconPath":"static/searchSelected.png",
				"text":"探索"
			},
			{
				"pagePath":"pages/mine/mine",
				"iconPath":"static/mine.png",
				"selectedIconPath":"static/mineSelected.png",
				"text":"我的"
			}
		]
	}
}

 注册全局组件tabbar在main.js文件中,配置如下:

import Vue from 'vue'
import App from './App'
import zdyTabbar from "components/zdy-tabbar.vue"

// 注册全局组件
Vue.component('zdy-tabbar', zdyTabbar)

Vue.config.productionTip = false

App.mpType = 'app'

const app = new Vue({
	...App
})
app.$mount()

 zdy-tabbar.vue文件编写:

<template>
	<view class="tabbar-container">
		<block>
			<view class="tabbar-item" v-for="(item, index) in tabbarList" :class="[item.centerItem ? ' center-item' : '']" @click="changeItem(item)">
				<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>
export default {
	props: {
		currentPage: {
			type: Number,
			default: 0
		}
	},
	data() {
		return {
			currentItem: 0,
			tabbarList: [
				{
					id: 0,
					path: '/pages/index/index',
					icon: '/static/home.png',
					selectIcon: '/static/homeSelected.png',
					text: '简介',
					centerItem: false
				},
				{
					id: 1,
					path: '/pages/discount/discount',
					icon: '/static/gift.png',
					selectIcon: '/static/giftSelected.png',
					text: '优惠',
					centerItem: false
				},
				{
					id: 2,
					path: '/pages/code/code',
					icon: '/static/code.png',
					selectIcon: '/static/codeSelected.png',
					text: '二维码',
					centerItem: true
				},
				{
					id: 3,
					path: '/pages/search/search',
					icon: '/static/search.png',
					selectIcon: '/static/searchSelected.png',
					text: '探索',
					centerItem: false
				},
				{
					id: 4,
					path: '/pages/mine/mine',
					icon: '/static/mine.png',
					selectIcon: '/static/mineSelected.png',
					text: '我的',
					centerItem: false
				}
			]
		};
	},
	mounted() {
		this.currentItem = this.currentPage;
		uni.hideTabBar();
	},
	methods: {
		changeItem(item) {
			let _this = this;
			//_this.currentItem = item.id;
			uni.switchTab({
				url: item.path
			});
		}
	}
};
</script>
<style>
view {
	padding: 0;
	margin: 0;
	box-sizing: border-box;
}
.tabbar-container {
	position: fixed;
	bottom: 0;
	left: 0;
	width: 100%;
	height: 110rpx;
	box-shadow: 0 0 5px #999;
	display: flex;
	align-items: center;
	padding: 5rpx 0;
	color: #999999;
}
.tabbar-container .tabbar-item {
	width: 20%;
	height: 100rpx;
	display: flex;
	flex-direction: column;
	justify-content: center;
	align-items: center;
	text-align: center;
}
.tabbar-container .item-active {
	color: #f00;
}
.tabbar-container .center-item {
	display: block;
	position: relative;
}
.tabbar-container .tabbar-item .item-top {
	width: 70rpx;
	height: 70rpx;
	padding: 10rpx;
}
.tabbar-container .center-item .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: #ffffff;
}
.tabbar-container .tabbar-item .item-top image {
	width: 100%;
	height: 100%;
}
.tabbar-container .tabbar-item .item-bottom {
	font-size: 28rpx;
	width: 100%;
}
.tabbar-container .center-item .item-bottom {
	position: absolute;
	bottom: 5rpx;
}
</style>

 所有的tabbar页面引入自定义tabbar:

<zdy-tabbar :current-page="0"></zdy-tabbar>

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

uniapp自定义tabbar,中间凸起(支持H5、微信小程序) 的相关文章

  • 导航栏下拉菜单(折叠)在 Bootstrap 5 中不起作用

    我在尝试使用以下命令创建响应式菜单或下拉按钮时遇到问题Bootstrap 5一切似乎都正常 导航图标和下拉图标出现 但它不起作用 当我单击nav图标或dropdown按钮 无dropdown menu apears 我想特别提到的是 我还包
  • 如何使用 Scrapy 从网站获取所有纯文本?

    我希望在 HTML 呈现后 可以从网站上看到所有文本 我正在使用 Scrapy 框架使用 Python 工作 和xpath body text 我能够获取它 但是带有 HTML 标签 而且我只想要文本 有什么解决办法吗 最简单的选择是ext
  • 如何使使用 css 调整大小的图像在 IE 中看起来不错?

    当使用 css 宽度 高度或属性宽度 高度缩放图像时 IE6 和 IE7 无法很好地缩放网页中的图像 我不确定它默认使用哪种算法 但这不好 在这些浏览器中缩放时 缩放图像会显示锯齿伪影 幸运的是 有一种方法可以通过简单的 css 规则强制
  • 如何使用 Javascript 设置查询字符串

    有没有办法使用 javascript 设置查询字符串的值 我的页面有一个过滤器列表 单击该列表时 它将更改右侧的页内结果窗格 我正在尝试更新 url 的查询字符串值 因此如果用户离开页面 然后单击 后退 按钮 他们将返回到最后一个过滤器选择
  • onclick 事件中未调用函数

    我想在每个 YouTube 链接的末尾添加一些 HTML 以在 litebox 中打开播放器 到目前为止 这是我的代码 document ready function var valid url new RegExp youtube com
  • CSS 到底如何计算相对尺寸

    我想更好地理解某些 CSS 行为 这与具体问题无关 我只是在调试网站时遇到的 让我们在固定位置的 div 中放置一个全宽图像 div img style width 100 src https via placeholder com 150
  • mongodb 聚合 - 累积字段的不同组值

    如果我有Player表格文件 name String score Int 我有Group文档 其中组代表玩家列表 groupName String players ObjectID 玩家可以属于多个组 我想做一个聚合Player文档 按以下
  • 如何在模态打开时防止主体滚动

    我在用着W3schools 模态脚本 https www w3schools com howto tryit asp filename tryhow css modal我想添加一个功能 防止模型打开时整个主体滚动 我根据我的需要对原始脚本做
  • 如何正确取消引用然后删除 JavaScript 对象?

    我想知道从内存中完全取消引用 JavaScript 对象的正确方法 确保删除时不会在内存中悬空 并且垃圾收集器会删除该对象 当我看这个问题时在 JavaScript 中删除对象 https stackoverflow com questio
  • JavaScript eval("{}") 返回行为?

    根据ECMA 262 规范 http www ecma international org publications files ECMA ST Ecma 262 pdf 以下语句返回1 eval 1 eval 1 eval 1 var a
  • 用于选择特定 div 中具有特定类的锚元素的 jQuery 选择器是什么

    我有一些这样的代码 我想选择每个 a 带有类的标签status在 div 中foo div a class status a div 你可以这样做 foo find status a
  • 如何使用 JavaScript 或 jQuery 克隆 HTML 元素的样式对象?

    我正在尝试克隆元素的样式对象 这应该允许我在更改后重置所述元素的样式 例如 el style left 50px curr style left 50px Modify the elements style The cloned style
  • 使用javascript动态更新css内容

    需要将 css 更新为动态值 我不确定最好的方法是什么 div style zoom 1 div 缩放级别将根据窗口大小调整触发 应用程序将相应缩放 我将此应用程序加载到 cordova 中并让它在 iPAD 中运行 然后我意识到需要使用
  • 使用 CSS 折叠和展开元素

    我正在尝试构建一个页面 加载时仅可见标题 并且 当用户单击标题时 每个标题下方的表格会在隐藏和显示状态之间切换 我的限制是只能在 CSS 中执行此操作 这是我到目前为止想到的 https jsfiddle net Argoron c1ypx
  • Highcharts jQuery 渲染问题 - 所有浏览器

    我在尝试使用构建堆积柱形图时遇到了一个奇怪的问题高图表 http www highcharts com 当图表呈现时 在您调整浏览器大小之前 不会显示列无论如何 导致图表重绘 我认为 图表的其余部分显示 轴 标题等 但不显示列本身 我在 I
  • 使用 next.js 进行服务器端渲染与传统 SSR

    我非常习惯 SSR 意味着页面得到完全刷新并从服务器接收完整 HTML 的方法 其中根据后端堆栈使用 razor pub other 进行渲染 因此 每次用户单击导航链接时 它只会向服务器发送请求 整个页面将刷新 接收新的 HTML 这就是
  • Webpack 4:如何使用 LESS 获取 CSS 源映射?

    多年来我一直在尝试让 CSS 源映射在 webpack 中工作 但没有成功 我不确定链条中哪里出了问题 我希望有人能指出我正确的方向 这是发生的事情 行号是错误的 实际上文件名也是错误的 main less只是包含一堆 import也就是说
  • css3按钮背景颜色无限过渡

    有没有办法仅使用 css3 使按钮的背景颜色从灰色渐变为蓝色 然后又回到灰色 一个很好的例子是默认操作按钮是可可 我知道这可以在 javascript 中完成 但我宁愿只使用 css 来完成此操作 您好 我已经通过 CSS3 动画制作了按钮
  • react-native - 图像需要来自 JSON 的本地路径

    你好社区 我正在react native中开发一个测试应用程序 并尝试从本地存储位置获取图像 我实际在做什么 我将图像直接链接源提供给 var 并在渲染函数中调用此方法 react 0 14 8 react native 0 23 1 np
  • 没有输入的 jQuery 日期选择器

    我有一个相当复杂的网络应用程序 我想向其中添加一些日期选择 UI 我遇到的问题是我无法从文档中弄清楚如何真正控制日期选择器的出现方式和时间 不涉及任何表单元素 不 我不会添加秘密表单字段 因此简单的开箱即用方法根本行不通 我希望有人可以提供

随机推荐

  • 014.Solidity入门——01数据类型

    数据类型是编写智能合约的基础 Solidity支持多种数据类型 包括基本数据类型 数组 结构体 枚举 映射等 基本数据类型包括 bool 布尔型 true或false int uint 整型 可以表示正负整数 int 或非负整数 uint
  • Oracle获取字符串长度

    Oracle中常用的字符串长度获取方法 有两个 lengthb string 和length string b是byte字节的意思 其中 lengthb string 计算string所占的字节长度 返回字符串的长度 单位是字节 lengt
  • matlab求解全局最优(初步介绍)

    这里可以看到全局优化的一些经典算法举例 matlab两个工具箱的比较 最左上角是求解器的选项 可以在此选择不同的算法求解 不同的求解器需要输入的参数也各不相同
  • Udacity Deep Learning课程作业(六)

    来到课程最后一次小作业 训练完word2vec模型后 作业六基于Text8 zip语料训练一个LSTM模型 用perplexity评价训练得到语言模型的质量 越低越好 LSTM Problem 1 num nodes 64 graph tf
  • 【Untiy2D独立/合作开发】特别篇:如何实现快速丢掉物品

    学习目标 一天两更累的一批 那么今天就来实现如何快速丢掉物品而不是只能拖拽物品这样能快速处理背包物品 学习内容 首先先去EventHandler上新建一个事件 public static event Action DropItemSelec
  • 【unity3D】如何修改相机的默认视角

    未来的游戏开发程序媛 现在的努力学习菜鸡 本专栏是我关于游戏开发的学习笔记 本篇是unity的如何修改相机的默认视角 如何修改相机的默认视角 Game窗口运行的话视角是这样的 此时Scene窗口的视角是这样的 可以观察到人物变化 但是我现在
  • html select 添加js,封装html的select标签的js操作实例

    复制代码 代码如下 function BindSelect id dataList fieldtext fieldValue 绑定某一个数据源 fieldtext为需要绑定的文本字段 fieldValue为需要绑定的value字段 var
  • 【docx4j】docx4j操作docx,实现替换内容、转换pdf、html等操作

    主要是想要用此功插件操作docx 主要的操作就是操作段落等信息 另外 也想实现替换docx的内容 实现根据模板动态生成内容的效果 也想用此插件实现docx转换pdf word的格式其实可以用xml来表现 docx4j也应该是基于xml来操作
  • Linux下的Jenkins安装教程

    当前环境 CentOS 7 8 Java 11 注意当前jenkins支持的Java版本最低为Java11 FinalShell 3 9 操作环境 安装Jenkins PS 不建议使用Docker安装Jenkins 因为使用Jenkins的
  • 设计模式学习(理论+实践)

    设计模式学习 理论 实践 例举一些Demo来帮助我们理解设计模式 https gitee com lipeng gzmu design pattern demo tree master
  • Ubuntu20.04下安装显卡驱动

    环境配置 系统 Ubuntu 20 04 CPU i5 GPU Geforce 960M Ubuntu安装显卡驱动 1 查看当前显卡安装情况 使用glxinfo查看 https dri freedesktop org wiki glxinf
  • 从多臂老虎机开始学习强化学习中的探索与利用

    从多臂老虎机开始学习强化学习中的探索与利用 quad 目录 从多臂老虎机开始学习强化学习中的探索与利用 多臂老虎机问题 形式化描述 估计期望奖励 代码实现 策略中的探索与利用 epsilo
  • 在Ubuntu 16.04 LTS服务器上安装FreeRADIUS和Daloradius的方法

    FreeRADIUS 为AAA Radius Linux下开源解决方案 DaloRadius为图形化web管理工具 freeradius一般用来进行账户认证管理 记账管理 常见的电信运营商的宽带账户 上网账户管理 记账 都是使用的radiu
  • Gradle最详细教程,关于Gradle,学习这些就够了.......

    目录 Gradle的简介 Groovy语言的学习 Groovy环境变量的配置 第一个Groovy项目 变量的定义 字符串的定义 字符串的常用方法 流程控制 switch for 闭包 基本技能 闭包的使用场景 闭包中的变量 列表 定义方式
  • pytorch转onnx踩坑日记

    在深度学习模型部署时 从pytorch转换onnx的过程中 踩了一些坑 本文总结了这些踩坑记录 希望可以帮助其他人 首先 简单说明一下pytorch转onnx的意义 在pytorch训练出一个深度学习模型后 需要在TensorRT或者ope
  • flex 布局相关问题

    flex 布局 父元素无法被撑开出现滚动条 div style width 100 height 100px display flex div style width 100 height 100px background antiquew
  • 【转载】Makefile教程

    该篇文章为转载 是对原作者系列文章的总汇加上标注 支持原创 请移步陈浩大神博客 http blog csdn net haoel article details 2886 makefile很重要 什么是makefile 或许很多Winodw
  • 《财政学》哈维罗森

    读完了易纲的 货币银行学 开始读财政学 希望对于一国的经济运行有所了解 2013 8 1 这本书讲国家如何利用财政 如何收税 如何使用 如何建立福利 社会是个很复杂的东西 不是简单的好或者不好 对于某些政策 简单看完 有待重看 2013 9
  • 编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前 。

    编写代码 以给定值x为基准将链表分割成两部分 所有小于x的结点排在大于或等于x的结点之前给定一个链表的头指针 ListNode pHead 请返回重新排列后的链表的头指针 注意 分割以后保持原来的数据顺序不变 解题思路 构造两个新的带头单向
  • uniapp自定义tabbar,中间凸起(支持H5、微信小程序)

    最近公司需要做一款app 需要中间按钮凸起 在网上找了一些 参考文献 做了一个demo H5效果图如下 小程序效果图如下 目录结构如下 page json的配置如下 pages path pages index index style na