微信小程序----团购或秒杀的批量倒计时实现

摘要:
渲染实现思路微信小程序可以倒数计时,每秒计算渲染!JS模拟货物列表数据goodsList;提取onLoad周期函数中的活动结束时间;创建时间格式函数timeFormat;建立倒计时功能;倒计时函数在onLoad周期函数提取结束时执行。

效果图

微信小程序----团购或秒杀的批量倒计时实现第1张
实现思路
微信小程序实现倒计时,可以将倒计时的时间进行每一秒的计算和渲染!

JS
模拟商品列表数据 goodsList;
在 onLoad 周期函数中对活动结束时间进行提取;
建立时间格式化函数 timeFormat;
建立倒计时函数 countDown;
在 onLoad 周期函数的提取结尾执行倒计时函数 countDown。
倒计时函数详解
获取当前时间,同时得到活动结束时间数组;
循环活动结束时间数组,计算每个商品活动结束时间的倒计时天、时、分、秒;
用 setData 方法刷新数据;
每个一秒执行一次倒计时函数 setTimeout(this.countDown,1000);

let goodsList = [
{actEndTime: '2018-05-01 10:00:43'},
{actEndTime: '2018-04-01 11:00:00'},
{actEndTime: '2018-06-01 12:45:56'},
{actEndTime: '2018-07-01 15:00:23'},
{actEndTime: '2018-05-23 17:00:22'},
{actEndTime: '2018-05-14 19:00:44'},
{actEndTime: '2018-05-21 21:00:34'},
{actEndTime: '2018-06-17 09:00:37'},
{actEndTime: '2018-03-21 05:00:59'},
{actEndTime: '2018-04-19 07:00:48'},
{actEndTime: '2018-04-28 03:00:11'}
]
Page({
data: {
countDownList: [],
actEndTimeList: []
},
onLoad(){
let endTimeList = [];
// 将活动的结束时间参数提成一个单独的数组,方便操作
goodsList.forEach(o => {endTimeList.push(o.actEndTime)})
this.setData({ actEndTimeList: endTimeList});
// 执行倒计时函数
this.countDown();
},
timeFormat(param){//小于10的格式化函数
return param < 10 ? '0' + param : param;
},
countDown(){//倒计时函数
// 获取当前时间,同时得到活动结束时间数组
let newTime = new Date().getTime();
let endTimeList = this.data.actEndTimeList;
let countDownArr = [];

// 对结束时间进行处理渲染到页面
endTimeList.forEach(o => {
let endTime = new Date(o).getTime();
let obj = null;
// 如果活动未结束,对时间进行处理
if (endTime - newTime > 0){
let time = (endTime - newTime) / 1000;
// 获取天、时、分、秒
let day = parseInt(time / (60 * 60 * 24));
let hou = parseInt(time % (60 * 60 * 24) / 3600);
let min = parseInt(time % (60 * 60 * 24) % 3600 / 60);
let sec = parseInt(time % (60 * 60 * 24) % 3600 % 60);
obj = {
day: this.timeFormat(day),
hou: this.timeFormat(hou),
min: this.timeFormat(min),
sec: this.timeFormat(sec)
}
}else{//活动已结束,全部设置为'00'
obj = {
day: '00',
hou: '00',
min: '00',
sec: '00'
}
}
countDownArr.push(obj);
})
// 渲染,然后每隔一秒执行一次倒计时函数
this.setData({ countDownList: countDownArr})
setTimeout(this.countDown,1000);
}
})


let goodsList = [
{actEndTime: '2018-05-01 10:00:43'},
{actEndTime: '2018-04-01 11:00:00'},
{actEndTime: '2018-06-01 12:45:56'},
{actEndTime: '2018-07-01 15:00:23'},
{actEndTime: '2018-05-23 17:00:22'},
{actEndTime: '2018-05-14 19:00:44'},
{actEndTime: '2018-05-21 21:00:34'},
{actEndTime: '2018-06-17 09:00:37'},
{actEndTime: '2018-03-21 05:00:59'},
{actEndTime: '2018-04-19 07:00:48'},
{actEndTime: '2018-04-28 03:00:11'}
]
Page({
data: {
countDownList: [],
actEndTimeList: []
},
onLoad(){
let endTimeList = [];
// 将活动的结束时间参数提成一个单独的数组,方便操作
goodsList.forEach(o => {endTimeList.push(o.actEndTime)})
this.setData({ actEndTimeList: endTimeList});
// 执行倒计时函数
this.countDown();
},
timeFormat(param){//小于10的格式化函数
return param < 10 ? '0' + param : param;
},
countDown(){//倒计时函数
// 获取当前时间,同时得到活动结束时间数组
let newTime = new Date().getTime();
let endTimeList = this.data.actEndTimeList;
let countDownArr = [];

// 对结束时间进行处理渲染到页面
endTimeList.forEach(o => {
let endTime = new Date(o).getTime();
let obj = null;
// 如果活动未结束,对时间进行处理
if (endTime - newTime > 0){
let time = (endTime - newTime) / 1000;
// 获取天、时、分、秒
let day = parseInt(time / (60 * 60 * 24));
let hou = parseInt(time % (60 * 60 * 24) / 3600);
let min = parseInt(time % (60 * 60 * 24) % 3600 / 60);
let sec = parseInt(time % (60 * 60 * 24) % 3600 % 60);
obj = {
day: this.timeFormat(day),
hou: this.timeFormat(hou),
min: this.timeFormat(min),
sec: this.timeFormat(sec)
}
}else{//活动已结束,全部设置为'00'
obj = {
day: '00',
hou: '00',
min: '00',
sec: '00'
}
}
countDownArr.push(obj);
})
// 渲染,然后每隔一秒执行一次倒计时函数
this.setData({ countDownList: countDownArr})
setTimeout(this.countDown,1000);
}
})

WXML
简单的布局和居中显示。

<view wx:for="{{countDownList}}" wx:key="countDownList">
剩余
<text class='tui-conutdown-box'>{{item.day}}</text>天
<text class='tui-conutdown-box'>{{item.hou}}</text>时
<text class='tui-conutdown-box'>{{item.min}}</text>分
<text class='tui-conutdown-box tui-countdown-bg'>{{item.sec}}</text>秒
</view>

WXSS
page{background-color: #eee;}
.tui-countdown-content{
height: 50px;
line-height: 50px;
text-align: center;
background-color: #fff;
margin-top: 15px;
padding: 0 15px;
font-size: 18px;
}
.tui-conutdown-box{
display: inline-block;
height: 26px;
26px;
line-height: 26px;
text-align: center;
background-color: #000;
color: #fff;
margin: 0 5px;
}
.tui-countdown-bg{
background-color: #DF0101;
}

实际应用效果图

微信小程序----团购或秒杀的批量倒计时实现第2张

免责声明:文章转载自《微信小程序----团购或秒杀的批量倒计时实现》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SonarQube系列三、Jenkins集成SonarQube(dotnetcore篇)C语言探索之旅 | 第一部分第五课:变量的世界(二),变量声明下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

c#调用存储过程两种方法

摘要 存储过程的调用在B/S系统中用的很多。传统的调用方法不仅速度慢,而且代码会随着存储过程的增多不断膨胀,难以维护。新的方法在一定程度上解决了这些问题。   关键词 ASP.NET;存储过程     在使用.NET的过程中,数据库访问是一个很重要的部分,特别是在B/S系统的构建过程中,数据库操作几乎成为了一个必不可少的操作。调用存储过程实现数据库操作使很...

Nodejs 实现ESL内联FreeSWITCH设定说明

一、背景说明:   SIP Server IP (Centos):192.168.11.61  ,服务器IP(Windows):192.168.11.19 二、目的:   能够从192.168.11.19上通过Nodejs的modesl 内联访问到SIP Server(FreeSWITCH),从而实现对SIP Server状态信息的获取。之前有看过很多文档...

unity 在移动平台中,文件操作路径详解

今天,这篇文章其实是个老生常谈的问题咯,在网上类似的文章也比比皆是,在此我只是做个详细总结方便大家能够更好、更快的掌握,当然,如有不足的地方 欢迎指正!!!相信大家在开发过程中,难免会保存一些文件在客户端进行本地化操作。如:配置文件,状态文件,Assetbundle文件等等...最近总有人问我:1.保存了一个xml在客户端,能读取里面的数据,可是不能修改,...

vue+ts+router实现单页面打开新窗口,不显示侧边栏问题(返回上一页,保留数据)

1. 单页面点击打开详情页为新窗口打开    const param :any ={ id:row.RELIC_INFO_ID, categoryCode : row.CATEGORYID, classCode : row.CLASSID, reliCode:row.RELICCODE,}; 把普通的路由跳转方式: this.$router.pu...

攻防世界-web-i-got-id-200(perl文件上传+ARGV造成任意文件读取和任意命令执行)

题目来源:csaw-ctf-2016-quals 题目描述:嗯。。我刚建好了一个网站 进入场景后有3个链接,点进去都是.pl文件,.pl文件都是用perl编写的网页文件。 尝试后发现,Files链接可以上传文件并把文件内容打印出来。猜想后台应该用了param()函数。 param()函数会返回一个列表的文件但是只有第一个文件会被放入到下面的接收变量中。如...

java BigDecimal实现精确加减乘除运算

加法: b1.add(b2) b2(加数) b1(被加数)减法: b1.subtract(b2) b2(减数) b1(被减数) 乘法: b1.multiply(b2) b2(乘数) b1(被乘数) 除法: b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP) b2(除数) b1(被除数)   import j...