收藏
回答

请问如何实现倒计时功能?

预定一个座位,获得一个预定按钮点击的时间,从点击的时间开始进行倒计时,二十分钟时后没有检测到签到则显示违约并将座位释放;在预约的结束时间到了之后自动释放座位。

想请教各位大佬,这个功能该如何写!

回答关注问题邀请回答
收藏

2 个回答

  • Vinlic
    Vinlic
    2021-02-15

    前端部分:

    通过setInterval实现倒计时20分钟

    后端部分:

    通过redis的方案:

    用户点击预订座位,后端向redis数据库插入一个key值用于代表该用户的一次预订,并设置该key值有效期为20分钟。

    在获取所有座位时,存在预订key的座位就显示占用,20分钟后由于redis自动释放该key所以座位自然就“释放”了


    2021-02-15
    有用 2
    回复 7
    • 摘星怪.
      摘星怪.
      2021-02-16
      大佬,这个setInterval怎么给后台留接口呢
      2021-02-16
      回复
    • Vinlic
      Vinlic
      发表于移动端
      2021-02-16回复摘星怪.
      你前端倒计时和后端没关系的,前端只负责准确显示倒计时,不过鉴于时间较长你可以每一分钟或者5分钟和服务器发起请求同步一下时间
      2021-02-16
      回复
    • 摘星怪.
      摘星怪.
      2021-02-17回复Vinlic
      老师,请问我这样写可以嘛
      2021-02-17
      回复
    • Vinlic
      Vinlic
      2021-02-17回复摘星怪.
      可以,但是我更倾向于时间戳,通过Date.now()获取,因为setInterval不是绝对准确的,开始计时时通过Date.now()获得起始时间,接下来的每一秒都用最新的Date.now()减去起始时间,得到已流逝时间,达到1800时停止计时。
      2021-02-17
      回复
    • Vinlic
      Vinlic
      2021-02-17回复摘星怪.
      还有注意的是Date.now()获得的是毫秒,需要除1000并取整
      2021-02-17
      回复
    查看更多(2)
  • 鲤子
    鲤子
    发表于小程序端
    2021-02-15
    事件订阅,redis mysql 都可以
    2021-02-15
    有用
    回复 2
    • 摘星怪.
      摘星怪.
      2021-02-15
      大佬,这个事件订阅可以解释的再详细一点嘛?
      2021-02-15
      回复
    • 鲤子
      鲤子
      发表于小程序端
      2021-02-15回复摘星怪.
      emmm,百度可以查
      2021-02-15
      回复
登录 后发表内容
问题标签