进入阅读页面二次需求处理

发布时间 2023-12-28 11:47:34作者: jialiangzai
思路
时间乃是时间戳毫秒级别
进入阅读页面
    记录当前进入页面的时间
    如果是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
    },