关于uni-app自写tab切换样式调整说明(左右滑动效果)

最近在做uni-app的项目,因tab切换样式需要调整,所以记录一下。另外还碰到了一个小坑,也会在这里说明,并共同探讨(修改版,已经过真机测试)

实现效果图:

 这里先说下遇到的坑,当前标签已有    :class 的情况下,这时候无论怎么样去添加类(JS代码)都会导致添加的类不生效(没深究,只是考虑下,应该是view层动态绑定后 直接覆盖了class)。

下面是代码:

<!-- 这里只展示日期tab切换代码,echarts代码请查看我的文字:echarts圆环 -->
<view @tap="changeTime(index)" class="time-item" v-for="(item,index) in timeItems" :key="index">
	{{timeIndex==index? '' : item}}
	<view v-show="isNew" :class="[timeIndex==index ? 'cur-time' : '']">{{timeIndex==index? item : ''}}</view>	
	<view v-show="!isNew":class="[timeIndex==index ? 'cur-time' : '', timeIndex==index ? styleClass : '']">{{timeIndex==index? item : ''}}</view>	
</view>

// js
    
	data() {
		return {
			timeIndex: 1, // 默认为近一周
			timeItems: ['近一天', '近一周', '近一月', '近六月', '近一年'],
            isNew: true, // 是否为初始化进入 用来给初始化tab 添加class 样式
            styleClass: '' // 动画类

		}
	},
		// 点击时间tab - 切换函数
		changeTime(index) {
			if (this.timeIndex == index) {
				return;
			}
			this.isNew = false // 点击后改变当前展示 标签
            在timeIndex 还未改变时重置类名
            this.setClass(this.timeIndex, index)
			this.timeIndex = index;
			// this.initData(); 重新设置echarts
		},
        // 设置类名
		setClass(timeIndex, index) {
			if(timeIndex > index){
				this.styleClass = 'slide-left'
			} else if(timeIndex < index) {
				this.styleClass = 'slide-right'
			}
		}

// css 部分
// 最外侧盒子式样
.time-container {
	display: flex;
	justify-content: space-around;
	font-size: 0;
	background-color: #F4F4F4;
	border-radius: 24rpx;
	margin: 30rpx 10rpx 0 10rpx;
	overflow: hidden;
	height: 60rpx;
}

// 每个tab 式样  (未选择的)
.time-item {
	position: relative;
	padding: 0 24rpx;
    box-sizing: border-box;
    font-size: 28rpx;
    color: #969DA3;
    text-align: center;
    line-height: 44rpx;
    margin: 6rpx 0;
	width: 132rpx;
}

// 选中式样
.cur-time {
	position: absolute;
	bottom: 100%;
	width: 132rpx;
    background: #fff;
    color: #1764E8;
    border-radius: 28rpx;
	height: 100%;
	top: 0;
	left: 0;
	font-weight: 700;
	box-shadow: 0px 0px 10px #ccc;
}
// 右滑动
.slide-right {
	animation: slide-right 0.5s cubic-bezier(0.250, 0.460, 0.450, 0.940) both;
}
// 左滑动
.slide-left {
	animation: slide-left 0.5s cubic-bezier(0.250, 0.460, 0.450, 0.940) both;
}
// 定义动画-左滑动
@keyframes slide-left {
  0% {
        transform: translateX(100rpx);
  }
  100% {
        transform: translateX(0);
  }
}
// 定义动画-右滑动
@keyframes slide-right {
  0% {
    transform: translateX(-100rpx);
  }
  100% {
    transform: translateX(0);
  }
}
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值