倒计时1.之前在做一个有拼团功能项目的时候遇到过倒计时的问题,由于当时技术不熟在这方面耽搁了好些时间,所以这里整理出来希望能为后来人提供些许启发。1.实现思路:求出发起拼团时间与拼团结束时间的时间差再将时间差格式化得到我们想要的格式如:时间每秒递减使用了setTimeout(this.setTimeCount,1000);这个函数,让这个函数每隔一秒执行一次。效果图:2.实现中的难点若是要实现单个倒计时如60s发送验证码倒不是很难,难的是多条倒计时。不同的订单下单时间是不一样的时间差time也就不一样,所以当初在这卡了很久,后来想通一切才觉得原来如此。实现方法1:是后台计算出时间前端直接获取时间差,当时为了不影响项目进度我们用的就是这个方法,真是苦了那个些后台的兄弟还得迁就我这个菜鸟。获取这个时间差time后我们就可以将它处理后放入数组循环。这样做的好处是前端不用将time作为一个属性添加到原数组中。index.wxml
viewclass"item"单条倒计时:{{time}}/viewviewclass"item"多条倒计时/viewviewclass'no'暂无任何记录/viewviewclass"content"blockwx:for"{{listData}}"wx:key"idx"wx:for-item"item"wx:for-index"{{idx}}"viewclass"tip{{item.time0?'isShow':''}}"viewclass"dis"viewclass'dis_timeleft'剩余时间:{{item.countDown}}/view/view/view/block/view2.index.wxss
page{height:100%;background:#fff;position:relative;}.item{height:4%;background:#fff;text-align:center;}.content{border:1pxsolidrgb(167,159,159);background:#F6F8F8;margin-bottom:300rpx;border-bottom:none;}.no{text-align:center;position:absolute;top:8%;z-index:-11;}.tip{position:relative;background:#fff;width:100%;height:100rpx;margin-bottom:5rpx;padding:20rpx0;border-bottom:1pxsolidgainsboro;}.isShow{display:none;}.dis{width:100%;font-size:35rpx;color:#009FE5;box-sizing:border-box;}.dis_time{width:50%;}3.index.js
Page({/***页面的初始数据*/data:{pingData:[{"id":"1","icon":"../../images/image2.jpg","number":"20","pingTime":"2019-3-2823:30:00","time":"55267","showList":"false",},{"id":"2","icon":"../../images/image3.jpg","number":"4566","pingTime":"2019-3-2812:30:00","time":"58934","showList":"false",},{"id":"3","icon":"../../images/image2.jpg","number":"20","pingTime":"2019-3-2808:30:00","time":"555234","showList":"false",}],time:"30"},/***生命周期函数--监听页面加载*/onLoad:function(options){varthatthisthat.setData({listData:that.data.pingData})that.setCountDown();that.setTimeCount();},/***60s倒计时*/setTimeCount:function(){lettimethis.data.timetime--;if(time0){time0;}this.setData({time:time})setTimeout(this.setTimeCount,1000);},/***倒计时*/setCountDown:function(){lettime1000;let{listData}this.data;letlistlistData.map((v,i){if(v.time0){v.time0;}letformatTimethis.getFormat(v.time);v.time-time;v.countDown`${formatTime.hh}:${formatTime.mm}:${formatTime.ss}`;returnv;})this.setData({listData:list});setTimeout(this.setCountDown,time);},/***格式化时间*/getFormat:function(msec){letssparseInt(msec/1000);letmsparseInt(msec%1000);letmm0;lethh0;if(ss60){mmparseInt(ss/60);ssparseInt(ss%60);if(mm60){hhparseInt(mm/60);mmparseInt(mm%60);}}ssss9?ss:`0${ss}`;mmmm9?mm:`0${mm}`;hhhh9?hh:`0${hh}`;return{ss,mm,hh};}})4.实现方法2:本着不想做菜鸟的心情,我在项目完成后由研究了下当初未完成的方法,即前端计算出时间差并将时间差数组作为原数组的属性加入循环遍历。当初一直不知如何在原数组中再添加一个数组作为它的一个属性。在之前的基础上将time时间差作为一个属性放到原数组中,关键代码如下:
varpinDatathat.data.pingDatafor(vari0;ipinData.length;i++){console.log("计算出长度为"+pinData.length)varendtimethat.data.pingData[i].pingTimeconsole.log("计算出长度为"+endtime)that.queryTime(endtime)vartime"pingData["+i+"].time"that.setData({[time]:that.queryTime(endtime),listData:pinData})}5.新增计算时间差的方法:
queryTime:function(pintime){varstart_datenewDate();varend_datenewDate(pintime.replace(/-/g,"/"));vardaysend_date.getTime()-start_date.getTime();console.log("获取到时间差"+days)returndays;}6.之前困惑我的地方就是如何将时间差这个数组添加到原来的数组中,现在想想思路清晰,曾经的难题也不过尔尔。index.js方法二修改后的代码
Page({/***页面的初始数据*/data:{pingData:[{"id":"1","icon":"../../images/image2.jpg","number":"20","pingTime":"2019-4-1523:30:00","time":"55267","showList":"false",},{"id":"2","icon":"../../images/image3.jpg","number":"4566","pingTime":"2019-4-1312:30:00","time":"58934","showList":"false",},{"id":"3","icon":"../../images/image2.jpg","number":"20","pingTime":"2019-4-1308:30:00","time":"555234","showList":"false",}],time:"60"},/***生命周期函数--监听页面加载*/onLoad:function(options){varthatthisvarpinDatathat.data.pingDatafor(vari0;ipinData.length;i++){console.log("计算出长度为"+pinData.length)varendtimethat.data.pingData[i].pingTimeconsole.log("计算出长度为"+endtime)that.queryTime(endtime)vartime"pingData["+i+"].time"that.setData({[time]:that.queryTime(endtime),listData:pinData})}that.setCountDown();that.setTimeCount();},/***60s倒计时*/setTimeCount:function(){lettimethis.data.timetime--;if(time0){time0;}this.setData({time:time})setTimeout(this.setTimeCount,1000);},/***倒计时*/setCountDown:function(){lettime1000;let{listData}this.data;letlistlistData.map((v,i){if(v.time0){v.time0;}letformatTimethis.getFormat(v.time);v.time-time;v.countDown`${formatTime.hh}:${formatTime.mm}:${formatTime.ss}`;returnv;})this.setData({listData:list});setTimeout(this.setCountDown,time);},/***格式化时间*/getFormat:function(msec){letssparseInt(msec/1000);letmsparseInt(msec%1000);letmm0;lethh0;if(ss60){mmparseInt(ss/60);ssparseInt(ss%60);if(mm60){hhparseInt(mm/60);mmparseInt(mm%60);}}ssss9?ss:`0${ss}`;mmmm9?mm:`0${mm}`;hhhh9?hh:`0${hh}`;return{ss,mm,hh};},queryTime:function(pintime){varstart_datenewDate();varend_datenewDate(pintime.replace(/-/g,"/"));vardaysend_date.getTime()-start_date.getTime();console.log("获取到时间差"+days)returndays;}})
微信小程序之订单倒计时实现-微信小程序倒计时demo-小程序倒计时功能
浏览量:2022
时间:
来源:圆角50%
版权声明
即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。
最新资讯
-

即速应用,赋能企业玩转微信小程序智慧经营
作为国内领军的智慧商业经营服务商,即速应用始终秉承“让每个企业都拥有自己的智慧店铺”的愿景,持续赋能更多企业玩转智慧经营。即速应用旗下拥有“小程序搭建工具-即速应用”、“私域流量专家-即客云”等产品,帮助商家打通互联网全生态营销闭环。 -

即客云2.0重磅更新,让微信小程序运营更简单!
即客云作为一款基于企业微信的第三方工具,现从多维度提供超过30种功能,自上线以来,已服务多家企业,受到一致好评。近期,我们根据客户反馈和市场调研正式推出升级版 即客云2.0!更新了私域运营SOP,群日历功能,批量拓客,客户雷达,消息推送,个人欢迎语,帮助企业更好运用企业微信;同时提升了社群运营工作标准化,提升运营效率,帮助企业实现客户增长,玩转私域流量。 -

零代码 + AI 双轮驱动|即速应用解锁人工智能小程序开发新范式
无需代码、无需 AI 算法功底,普通人也能快速搭建智能小程序。即速应用将人工智能与零代码开发深度融合,推出 AI 智能生成能力,用户通过自然语言描述需求,AI 自动生成小程序页面、功能模块与后台配置,覆盖商城、预约、同城、社区团购等全场景。平台内置 AI 智能推荐、智能客服、用户画像分析等能力,一键对接微信生态,打通视频号、企业微信、短信跳转,帮企业快速落地 AI 应用,抢占智慧经营先机,让每家企业都拥有 AI 驱动的智慧店铺。










