思路
时间乃是时间戳毫秒级别
进入阅读页面
记录当前进入页面的时间
如果是0:0:0 要重置时长
如果不是凌晨,查看今天是否阅读过,如果阅读过要在之前的阅读时长存储一下
更新时长
之前记录了(包含上次)进入页面的时间,在此基础上获取最新的时间并减去进入页面的开始时间得到时长,并在上次时长累加,接下来就是格式化一下,最重要的一点就是要更新最新的时间作为开始时间
离开阅读页面
存储最新时长
清除定时器
为完成的,只是进入了页面进行判断是否是凌晨,如果是在晚上11点进入页面,但是阅读到了凌晨1点,是无法重置时长的,要重置就要在开启定时器做判断,如果到达某一刻了,就重置为0,缓存也要重置
点击查看代码
async startReading() {
let elapsedTimeLocal = await $utils.getStorage('elapsedTime')
const storedTime = parseInt(elapsedTimeLocal)
const currentTime = new Date();
if (currentTime.getHours() === 0 && currentTime.getMinutes() === 0 && currentTime.getSeconds() === 0) {
this.elapsedTime = 0;
await $utils.setStorage('elapsedTime', 0)
} else {
this.elapsedTime = storedTime || 0;
}
this.startTime = currentTime.getTime();
this.timerReadId = setInterval(() => {
this.updateElapsedTime()
}, 1000);
},
async updateElapsedTime() {
const currentTime = new Date();
let currentTImeStamp = currentTime.getTime()
if (currentTime.getHours() === 0 && currentTime.getMinutes() === 0 && currentTime.getSeconds() === 0) {
this.elapsedTime = 0;
await $utils.setStorage('elapsedTime', 0)
} else {
this.elapsedTime += (currentTImeStamp - this.startTime);
}
const formattedTime = $utils.durationFn(this.elapsedTime);
this.durationText = formattedTime
console.log("已用时间:" + formattedTime);
this.startTime = currentTImeStamp;
},
onShow() {
this.startReading()
},
async onHide() {
await $utils.setStorage('elapsedTime', this.elapsedTime)
clearInterval(this.timerReadId)
this.timerReadId = null
},