倒计时组件 兼容 ios/安卓

倒计时组件

在这里插入图片描述
在这里插入图片描述

<template>
	<view class="min-countdown" :class="countdownClass">
		<rich-text  :nodes="time"></rich-text>
<!-- 		<view  class="" v-html="time"></view>
		<u-parse  :content="time"></u-parse> -->
	</view>
</template>

<script>
export default {
	name: 'min-countdown',
	props: {
		targetTime: {
			type: Number,
			default: 0
		},
		format: {
			type: String,
			default: '{%d}天{%h}时{%m}分{%s}'
		},
		countdownClass: {
			type: String,
			default: ''
		}
		// time: {
		//   type: String,
		//   default: '00天00时00分00秒'
		// }
	},
	data() {
		return {
			time: '00分00秒'
		};
	},
	methods: {
		init() {
			setTimeout(() => {
				this.getTime();
			}, 1000);
		},
		getTime() {
			let time = {};
			let format = this.format;
			function formatNumber(num) {
				return num > 9 ? `${num}` : `0${num}`;
			}
			// console.log( this.targetTime,new Date().getTime(),'---------')
			const gapTime = Math.ceil((this.targetTime - new Date().getTime()) / 1000);
			if (gapTime >= 0) {
				time.d = formatNumber(parseInt(gapTime / 86400));
				let lastTime = gapTime % 86400;
				time.h = formatNumber(parseInt(lastTime / 3600));
				lastTime = lastTime % 3600;
				time.m = formatNumber(parseInt(lastTime / 60));
				time.s = formatNumber(lastTime % 60);
				['d', 'h', 'm', 's'].forEach(item => {
					
					const day = time[item].split('');
					// console.log(day)
					format = format.replace('{%' + item + '}', time[item]);
					format = format.replace('{%' + item + '0}', day[0]);
					format = format.replace('{%' + item + '1}', day[1]);
					format = format.replace('{%' + item + '2}', day[2] ? day[2] : '0');
				});
				this.time = format;
				this.init();
			} else {
				this.$emit('callback');
			}
		}
	},
	mounted() {
		this.getTime();
	}
};
</script>

<style scoped>
.min-countdown {
	display: inline-flex;
	justify-content: center;
	align-items: center;
}
</style>

属性与事件

在这里插入图片描述
在这里插入图片描述

组件使用

<view class="countdown-box">
			<text>距活动开始:</text>
			<min-countdown v-if="startTime !== null" :targetTime="startTime" countdownClass="red" @callback="callback" :format="format"></min-countdown>
</view>

<script>
export default {
	computed: {
	
	},
	components: {
	},
	data() {
		return {
		startTime:1657170789000,
			format: `<div class="countdown-time-box">
				<span class="time-box">{%d0}</span>
				<span class="time-box ml">{%d1}</span>
				<span class="time-text">天</span>
				<span class="time-box">{%h0}</span>
				<span class="time-box ml">{%h1}</span>
				<span class="time-text">时</span>
				<span class="time-box">{%m0}</span>
				<span class="time-box ml">{%m1}</span>
				<span class="time-text">分</span>
				<span class="time-box">{%s0}</span>
				<span class="time-box ml">{%s1}</span>
				<span class="time-text">秒</span>
			  </div>`,
		};
	},
	onLoad(option) {
	},
	methods: {
		
		callback() {
			// console.log('倒计时结束');
		},
		
};
</script>
<style lang="scss" scoped>
		.countdown-time-box {
			display: flex;
			// width: 60%;
			.time-box {
				color: #de4a2c;
				font-size: 28rpx;
				text-align: center;
				background: #fff5de;
				width: 38rpx;
				height: 38rpx;
				border-radius: 8rpx;
				display: block;
				line-height: 38rpx;
			}

			.ml {
				margin-left: 8rpx;
			}

			.time-text {
				margin: 0 12rpx;
			}
		}
</style>

日期转换为时间戳

let stemp = '2020-07-27 00:00:00';
let stime = new Date(stemp.replace(/-/g, '/')).getTime();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

织_网

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值