本文是对类似于拼团,多个商品每个都有各自的倒计时,一开始接到接到这个需求也是头疼了一阵子,如果是在商品列表少的时候完全就可以写成死的,固定的变量,写几个定时器就ok了,

但是这次数据是活的,看一些拼团app都可以实现,既然能实现就搞起来,有了以下的想法 使用环境 vue

写一个准备渲染的数据,

data () {return {list: [ // 准备渲染的数据{remainTime: 900000, // 距离结束还有多久remainTimeStr: '' // 展示文案},{remainTime: 400000,remainTimeStr: ''},{remainTime: 60500,remainTimeStr: ''},]}
}

百度copy一个倒计时的方法

countdowm (timestamp) {let self = thislet timer = setInterval(function () {let nowTime = new Date()let endTime = new Date(timestamp)let t = endTime.getTime() - nowTime.getTime()if (t > 0) {let day = Math.floor(t / 86400000)let hour = Math.floor((t / 3600000) % 24)let min = Math.floor((t / 60000) % 60)let sec = Math.floor((t / 1000) % 60)hour = hour < 10 ? '0' + hour : hourmin = min < 10 ? '0' + min : minsec = sec < 10 ? '0' + sec : seclet format = ''if (day > 0) {format = `${day}天${hour}小时${min}分${sec}秒`}if (day <= 0 && hour > 0) {format = `${hour}小时${min}分${sec}秒`}if (day <= 0 && hour <= 0) {format = `${min}分${sec}秒`}self.content = format} else {clearInterval(timer)self.content = 'over'}}, 1000)
}

首先

根据逻辑对倒计时的方法进行更改,我们直接使用的就是距离结束还有多少时间的时间戳 ,我的思路是用一个定时器达到一个并行多个倒计时的思路,所以先将方法进行优化

1. 不需要获取时间

2. 也不需要一些时间计算

3. 因为是多个倒计时并行 所以清楚定时器的逻辑需要进行更改

如下

countdowm (timestamp) {let self = thislet timer = setInterval(function () {let t = timestampif (t > 0) {let day = Math.floor(t / 86400000)let hour = Math.floor((t / 3600000) % 24)let min = Math.floor((t / 60000) % 60)let sec = Math.floor((t / 1000) % 60)day = day < 10 ? '0' + day : dayhour = hour < 10 ? '0' + hour : hourmin = min < 10 ? '0' + min : minsec = sec < 10 ? '0' + sec : seclet format = ''format = `${day}天${hour}小时${min}分${sec}秒`self.content = format} else {// clearInterval(timer)self.content = 'over'}}, 1000)
}

简化完毕, 把自己刚才的思路带进方法内 

在定时器里 写一个循环 每次减少一秒 让当前数据内remainTime时间戳-1000

countdown () {let self = thislet timer = setInterval(function () {for (let i = 0; i < self.list.length; i++) {self.list[i].remainTime -= 1000let t = self.list[i].remainTimeif (t > 0) {let day = Math.floor(t / 86400000)let hour = Math.floor((t / 3600000) % 24)let min = Math.floor((t / 60000) % 60)let sec = Math.floor((t / 1000) % 60)day = day < 10 ? '0' + day : dayhour = hour < 10 ? '0' + hour : hourmin = min < 10 ? '0' + min : minsec = sec < 10 ? '0' + sec : seclet format = ''format = `距离结束:<b>${day}</b> 天 <b>${hour}</b> 时 <b>${min}</b> 分 <b>${sec}</b> 秒`self.list[i].remainTimeStr = format} else {// 进行判断 如果数据内所有的倒计时已经结束,那么结束定时器, 如果没有那么继续执行定时器let flag = self.list.every((val, ind) => val.remainTime <= 0)if (flag) clearInterval(timer)self.list[i].remainTimeStr = `距离结束:<b>00</b> 天 <b>00</b> 时 <b>00</b> 分 <b>00</b> 秒` // 结束文案}}}, 1000)
}

这样 并行多个定时器就做好了, 但是发现了一个问题 当你切换路由的时候 发下你的定时器如果未结束 他还在执行,这样对性能造成了一些影响, 虽说用户看不到,但是也要解决,提高用户浏览体验

在你切换页面的时候 使用vue中的生命周期函数把数据更改为0 就ok

destroyed () {this.list.forEach((val) => {val.remainTime = 0})
}

嗖嗖嗖~ 对应文章

还有一些什么好的方法可以联系我喔~

多个倒计时并行(拼团倒计时)相关推荐

  1. 拼团倒计时效果 2021-01-13

    [欢迎关注wx公众号:一缕风沙渡,回复uniapp拼团倒计时获取最新文件] image.png image.png 拼团倒计时效果.gif <template><view class ...

  2. 微信小程序实现拼团成功动画

    微信小程序实现如上效果. 分为两个组件: PinTuan: 整体组件 PinTuanHead: 每个头像组件 代码如下: PinTuan.js Component({attached:function ...

  3. 基于jQuery倒计时插件实现团购秒杀效果

    倒计时一般是用来表示未来某一时刻距现在时刻还剩多少时间.倒计时在WEB上应用非常广泛,如考试系统倒计时,团购网站中的优惠活动倒计时等等.今天,我们来使用jQuery倒计时超级实现团购秒杀效果,感兴趣的 ...

  4. 微信小程序拼团功能之表结构

    做拼团功能首先我对需求看了一下,对于单个的拼团商品要求有拼团的人数限制,拼团的活动时间倒计时,以及开团后参团时间倒计时等需求.开团人是团长与参团人加以区分,同时一个拼团有多人参加,付款与未付款对拼团成 ...

  5. 怎么实现微信小程序云开发拼团功能?

    [微信云开发教程]怎么实现微信小程序云开发拼团功能? 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 [微 ...

  6. 拼团活动的业务测试点

    根据图片的原型梳理的拼团活动的测试点如下: 一.页面与原型一致性的检查 1.商品图片可点击查看,可放大,可滑动查看, 2.拼单价显示是否正确 3.限量份数显示是否正确,限购数件数的显示是否正确 4.已 ...

  7. 微信小程序案例:拼团模块

    就像拼夕夕一样,有些活动需要朋友助力. 最近有个需求是这样的: 核心: 与微信小程序的激励广告联系一起,点击按钮助力,弹出微信激励广告,观看广告后,给予奖励,助力人数减1 分享给朋友,请朋友助力,助力 ...

  8. html倒计时星期日,Web前端——倒计时效果

    一.JavaScript Date对象 getYear() 获取年份,获取年最好用 getFullYear()获取完整格式年份,如2014,一般用这个 getMonth()获取月,从0开始(0~11) ...

  9. 消息延迟队列处理拼团时间到期

    1.RabbitMqConfig /*** * 延时队列交换机* * 注意这里的交换机类型:CustomExchange* ** * @return* */ @Bean public CustomEx ...

最新文章

  1. mysql存储引擎6_Mysql各种存储引擎对比总结
  2. http://snmp.adventnet.com/help/snmpapi/snmpv3/table_handling/snmptables_rowdata.html
  3. cisco routemap 能在出接口调用吗_潍坊驰燃一号燃料能不能合法在家经营,手续好办吗?...
  4. Log4j 2使用教程
  5. 1-5Tomcat 目录结构 和 web项目目录结构
  6. 【牛客 - 331G】炫酷数字(反素数打表 或 扩展埃式筛法,结论)
  7. 全球六大国际域名解析量统计报告(6月25日)
  8. Linux网络实时流量监测工具iftop的安装使用
  9. KeyMob手机聚合平台已集成多家移动广告平台
  10. 忍者神龟java_忍者神龟-邪恶重生
  11. Java一键生成PDF合同以及骑缝章、盖章处的精准盖章
  12. php钓鱼网站怎么做视频教程,反黑钓鱼网站全过程
  13. 谷歌chrome浏览器打不开网页,但是其他浏览器可以打开怎么办?
  14. Android聊天室(服务器)
  15. 两台计算机如何连接一个网络打印机共享,打印机怎么连接2台电脑?两台或多台电脑连接共享打印机操作方法...
  16. Prometheus(四)——Alertmanager
  17. caniuse_使用此工具将CanIUse表嵌入到您的网站中
  18. 记账APP:小哈记账3——登录页面的制作
  19. Flask教程(十六)RESTful-API
  20. 为了革命 保护眼睛 !—— 眼科专家配置的色调

热门文章

  1. 微信分享连接个别手机、ios转发不显示图片的,缩略图不出来
  2. 轻松玩转Scratch 3.0编程课程计划
  3. java分支结构之switch
  4. Windows CMD 检擦电脑是否被入侵[简单办法]
  5. Web前端面试指导 四十 CSS3有哪些新特性
  6. no input file specified 解决方法
  7. git 生成ssh 密钥
  8. 【15.罗马数字转整数】
  9. Excel如何批量将中文名字翻译为英文
  10. 小学生计算机的起源与发展ppt,计算机的起源与发展历程ppt课件.ppt