uniapp:tabBar点击后设置动画效果

APP端不支持dom操作,也不支持active伪类,绞尽脑汁也没办法给uniapp原生的tabBar点击加动画效果,所以最终只能舍弃原生tabBar,改用自定义tabBar。

自定义tabBar的原理是,页面的上部分分别是tabBar对应的页面组件,下部分是固定在底部的tabBar,通过点击tabBar获取到当前索引,然后通过v-if来判断显示哪个页面组件,跟原生tabBar不同的是,这里仅用一个page,所以在pages.json里只需要注册index页面即可,在router里也只需要设置index即可,同时也要注意,其他页面组件并不是一个页面,所以没有onShow,onLoad等方法,可以通过computed和watch来达到类似效果。

index页面的完整代码:

html 复制代码
<template>
	<view>
		<home v-if="PageCur=='home'" />
		<orders v-if="PageCur=='orders'" />
		<messages v-if="PageCur=='messages'" />
		<find v-if="PageCur=='find'" />
		<my v-if="PageCur=='my'" :userInfo="userInfo"/>
		<view class="cu-bar tabbar bg-white shadow foot">
			<view class="cu-bar tabbar bg-white shadow foot">
				<view :class="PageCur=='home'?activeColor:defaultColor" @click="NavChange" data-cur="home">
					<view class='cuIcon-homefill' :class="PageCur=='home'?'animation-bounce':''"></view>主页
				</view>
				<view :class="PageCur=='orders'?activeColor:defaultColor" @click="NavChange" data-cur="orders">
					<view class='cuIcon-formfill' :class="PageCur=='orders'?'animation-bounce':''"></view>订单
				</view>
				<view :class="PageCur=='messages'?activeColor:defaultColor" @click="NavChange" data-cur="messages">
					<view class='cuIcon-commentfill' :class="PageCur=='messages'?'animation-bounce':''"></view>消息
				</view>
				<view :class="PageCur=='find'?activeColor:defaultColor" @click="NavChange" data-cur="find">
					<view class='cuIcon-explorefill' :class="PageCur=='find'?'animation-bounce':''"></view>发现
				</view>
				<view :class="PageCur=='my'?activeColor:defaultColor" @click="NavChange" data-cur="my">
					<view class='cuIcon-myfill' :class="PageCur=='my'?'animation-bounce':''"></view>我的
				</view>
			</view>
		</view>
	</view>
</template>

<script>
	import { USER_INFO } from "@/common/util/constants"
	export default {
		data() {
			return {
				defaultColor: 'action text-gray',
				activeColor: 'action text-red',
				PageCur: 'home',
				userInfo: {},
				
			};
		},
	onLoad: function() {
			this.PageCur = 'home';
			this.userInfo = uni.getStorageSync(USER_INFO);
		},
		methods: {
			NavChange: function(e) {
				this.PageCur = e.currentTarget.dataset.cur;

			}

		}
	}
</script>

<style scoped lang="scss">

</style>

在view的data-cur属性里设置每个tab的key,通过点击事件可以获取这个key,比如当key等于home时,通过动态类设置被选中的颜色,同理,给icon设置一个animation-bounce类,这个类是控制动画效果的,已经提前写在一个animation.css文件里了,这种动画效果的css文件网上很多,可以自己找一下,icon会被放大1.4倍,然后恢复。

html 复制代码
@-webkit-keyframes bounce {
    0% {
        transform: scale(1);
    }
    50% {
        transform: scale(1.4);
    }
    100% {
        transform: scale(1);
    }
}

最终效果:

参考文章:uniApp混合开发小程序实现自定义底部tab仿绿洲APP动画效果_uniapp的tabbar图标变化可以动画吗_湫沐椿风的博客-CSDN博客

相关推荐
FRing0321 分钟前
JavaScript入门到精通三十三(异常处理、call方法、apply方法、bind方法、防抖、节流)
开发语言·前端·javascript
计算机魔术师1 小时前
OpenAI 砍掉 100 亿融资目标,AI 资本市场的温度计变了
前端
jktantan1 小时前
(二)Vue 3 的 attrs 不是响应式:el-form 扩展属性同步的三种方案
前端·javascript·vue.js·element-plus
前端 贾公子2 小时前
第 5 章:Codex 从可运行程序到可交付工具
java·前端·数据库
用户360055579002 小时前
Kestrel_VLLM - 26 · 发射空档三步曲:事件计时 → nsys → 判别实验
前端
echome8882 小时前
JavaScript async/await 错误处理:别让 Promise 静默失败
开发语言·前端·javascript·promise
PedroQue993 小时前
v0.2.0 架构升级:class + reactive 重塑状态管理
前端·uni-app
鶴哥只手遮天3 小时前
Angular 22 源码级深度解析-第 02 章 编译链路总览:从模板字符串到 `ɵɵ` 指令
前端·开源·angular.js
尘世中一位迷途小书童3 小时前
别再堆万字 Prompt:用 Agent Skills 给团队写一个「前端 Review」Skill
前端·ai编程·cursor
aixingpan3 小时前
aixingpan.cn API开发文档:api_docs_bichart_common2接口指南
前端·php