vue实现时间进度条,可以封成组件

最近工作需求做一个时间条,如下图。是在uniapp小程序项目中做的,记录一下思路和成果,本人脑子不聪明,如果有更好的方法欢迎告诉我。

1.思路:刚开始接到这个需求想到的就是用时间段数组定位来实现。每一个时间段都是一个数组,多次遍历定位到背景的bar上。

2.template代码

<view class="time_bar">
						<view class="flex align-center justify-between">
							<view v-for="(items) in timeBarList" :key="items" class="time_bar_num">{{items}}
							</view>
						</view>
						<view class="time_bar_bar">
							<view class="time_bar_piece" v-for="(itemss,indexss) in item.showTimeArr" :key="indexss"
								:style="{ width: itemss.duringTime, left: itemss.passTime }">
							</view>
						</view>
					</view>

下划线的class是我自己定义的,其他的flex等class是使用了color-ui;

3.css代码

.time_bar {
				margin-top: 26rpx;
				overflow: auto;

				.time_bar_num {
					width: 21rpx;
					height: 20rpx;
					line-height: 20rpx;
					font-size: 20rpx;
					font-weight: 400;
					color: #C7C7C7;
					// text-align: center;
				}

				.time_bar_bar {
					width: 653rpx;
					height: 20rpx;
					background: #D2E7FF;
					border-radius: 6rpx;
					margin-top: 9rpx;
					position: relative;
					overflow: hidden;

					.time_bar_piece {
						position: absolute;
						top: 0;
						background-color: #1A84FF;
						height: 20rpx;
					}
				}
			}

4.js代码

getList(){
const morningTime = new Date();
					//开始时间需要在这改
					morningTime.setHours(7, 0, 0, 0); // 设置小时、分钟、秒和毫秒为0
					this.meetingList.forEach((v) => {
						if (Array.isArray(v.timeArr) && v.timeArr.length > 0) {
							if (!v.showTimeArr) {
								v.showTimeArr = [];
							}
							// 计算每个数组中第一个时间与当前时间的差值(以小时为单位)  
							v.timeArr.forEach((timeArray) => {
								const startTime = timeArray[0].replace(/\-/g, '/');
								const endTime = timeArray[1].replace(/\-/g, '/');
								const firstTime = new Date(startTime);
								const secondTime = new Date(endTime);
								let passTime = (firstTime - morningTime) / (1000 * 60 * 60); // 转换为小时  
								let duringTime = (secondTime - firstTime) / (1000 * 60 * 60); // 转换为小时  
								//改完时间这里需要改用100除以时间段多少个
								passTime = (passTime * 667) / 100
								duringTime = (duringTime * 667) / 100
								v.showTimeArr.push({
									"passTime": `${passTime}%`,
									"duringTime": `${duringTime}%`
								})
							});
						}
					})
				}

}

需要的数据格式是

[[],[],[],[],[],[],[],[],[]]

背面背景的条的刻度、开始时间、结束时间也可以后台配置。我这里都写死的。

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值