实现场景:试卷答题,点击开始考试,出现倒计时,刷新倒计时就没有了
实现思路:
关键点在于进来以后获取当前时间计算出结束时间
假设接口是20分钟以后倒计时结束,下面就算出了都是秒的时候倒计时结束了
new Date().getTime() + 20*60*1000
结束时间减去当前时间,就算出了时间差毫秒数
let time = new Date().getTime() + 20*60*1000 - new Date().getTime()
uview组件的使用办法
<u-count-down :time="time " format="HH:mm:ss"></u-count-down>
下面是是实现代码相关逻辑
<template>
<u-count-down :time="form.countdown" format="HH:mm:ss"></u-count-down>
</template>
<script>
import { reactive, toRefs, defineComponent, computed } from 'vue';
export default defineComponent({
components: {},
setup() {
const state = reactive({
loading: true,
form: {},
});
onLoad((options) => {
state.loading = true;
if (options.examId) {
start({ examId: options.examId }).then((response) => {
const { data } = response;
let countdown = getStorage('countDow');
let countTime = 0;
let currentTime = new Date().getTime();
if (!countdown) {
let endTime = new Date().getTime() + data.examTime*60*1000;
setStorage(endTime,'countDow')
countTime = endTime - currentTime;
}else{
countTime = countdown - currentTime;
}
data.countdown = countTime;
state.loading = false;
state.form = data;
}).catch(() => {
state.loading = false;
})
}
})
return {
...toRefs(state)
};
},
methods: {}
});
</script>
<style scoped lang="scss">
</style>