微信小程序实现单个或多个倒计时功能


Posted in Javascript onNovember 01, 2020

微信小程序 实现单个/多个倒计时显示

  • 单个倒计时
  • 多个倒计时

思路:首先获取到每个倒计时的结束时间,然后把结束时间跟当前时间转换成时间戳,结束时间减去当前时间再除以1000(因为时间戳是毫秒级)就是该结束时间距离当前时间的秒数了,然后根据公式计算出时分秒,最后使用定时器每秒跑一次就实现成功啦~
两种倒计时思路差不多,多个倒计时多了遍历数组步骤,遍历拿到数组中每个对象结束时间来计算时间

好啦!说完思路先上效果图看看

微信小程序实现单个或多个倒计时功能

单个倒计时

上代码,上代码!!!重点来啦

wxml:

// 单个倒计时-----wxml
<view class="countdown">
 <view class="item">
 倒计时:
 <view class="txt-time">{{txtTime.hou}}</view>:
 <view class="txt-time">{{txtTime.min}}</view>:
 <view class="txt-time">{{txtTime.sec}}</view>
 </view>
</view>

css:

// 单个倒计时-----wxss
.countdown .item {
 display: flex;
 justify-content: center;
 align-items: center;
 height: 200rpx;
 width: 90%;
 margin: 0 5%;
 border-bottom: 2rpx solid #eee;
}

.countdown .item .txt-time {
 background-color: #6EBEC7;
 color: #fff;
 border-radius: 10rpx;
 font-size: 28rpx;
 margin: 0 4rpx;
 font-weight: bold;
 height: 42rpx;
 width: 66rpx;
 line-height: 42rpx;
 text-align: center;
}

js:

// 单个倒计时-----js
Page({
 /**
 * 页面的初始数据
 */
 data: {
 endTime: "2020-08-22 18:30:00",//结束时间
 },

 //时间显示小于10的格式化函数
 timeFormat(param) {
 return param < 10 ? '0' + param : param;
 },
 //倒计时
 singleCountDown: function () {
 var that = this;
 var time = 0;
 var obj = {};
 var endTime = new Date(that.data.endTime.replace(/-/g, "/")).getTime();//结束时间时间戳
 var currentTime = new Date().getTime();//当前时间时间戳
 time = (endTime - currentTime) / 1000;
 // 如果活动未结束
 if (time > 0) {
 var hou = parseInt(time / (60 * 60));
 var min = parseInt(time % (60 * 60 * 24) % 3600 / 60);
 var sec = parseInt(time % (60 * 60 * 24) % 3600 % 60);
 obj = {
 hou: that.timeFormat(hou),
 min: that.timeFormat(min),
 sec: that.timeFormat(sec)
 }
 } else { //活动已结束
 obj = {
 hou: "00",
 min: "00",
 sec: "00"
 }
 clearTimeout(that.data.timeIntervalSingle); //清除定时器
 }
 var timeIntervalSingle = setTimeout(that.singleCountDown, 1000);
 that.setData({
 timeIntervalSingle,
 txtTime: obj,
 })
 },

 /**
 * 生命周期函数--监听页面加载
 */
 onLoad: function (options) {
 this.singleCountDown();//页面加载时就启动定时器
 },
})

多个倒计时

wxml:

// 多个倒计时显示-----wxml
<view class="countdown">
 <block wx:for="{{timeList}}" wx:key="index">
 <view class="item">
 {{item.title}}:
 <view class="txt-time">{{item.time.hou}}</view>:
 <view class="txt-time">{{item.time.min}}</view>:
 <view class="txt-time">{{item.time.sec}}</view>
 </view>
 </block>
</view>

wxss: 跟上面单个倒计时样式一样,这里就不贴出来啦!

js:

// 多个倒计时显示-----wxml
Page({
 /**
 * 页面的初始数据
 */
 data: {
 timeList: [{//时间数组
 title: "a倒计时",
 endTime: "2020-08-23 18:00:00",
 }, {
 title: "b倒计时",
 endTime: "2020-08-25 20:00:00",
 }, {
 title: "c倒计时",
 endTime: "2020-08-21 20:00:00",
 }],
 },

 //时间显示小于10的前面补0方法
 timeFormat(param) {
 return param < 10 ? '0' + param : param;
 },
 //多个倒计时函数
 severalCountDown: function () {
 var that = this;
 var time = 0;
 var obj = {};
 var timeList = that.data.timeList;
 //遍历数组,计算每个item的倒计时秒数
 timeList.forEach(function (item) {
 var endTime = new Date(item.endTime.replace(/-/g, "/")).getTime();//结束时间时间戳
 var currentTime = new Date().getTime();//当前时间时间戳
 time = (endTime - currentTime) / 1000;
 // 如果活动未结束
 if (time > 0) {
 var hou = parseInt(time / (60 * 60));
 var min = parseInt(time % (60 * 60 * 24) % 3600 / 60);
 var sec = parseInt(time % (60 * 60 * 24) % 3600 % 60);
 obj = {
  hou: that.timeFormat(hou),
  min: that.timeFormat(min),
  sec: that.timeFormat(sec)
 }
 } else { //活动已结束
 obj = {
  hou: "00",
  min: "00",
  sec: "00"
 }
 clearTimeout(that.data.timeIntervalSeveral); //清除定时器
 }
 item.time = obj;
 })
 var timeIntervalSeveral = setTimeout(that.severalCountDown, 1000);
 that.setData({
 timeIntervalSeveral,
 timeList,
 })
 },

 /**
 * 生命周期函数--监听页面加载
 */
 onLoad: function (options) {
 this.severalCountDown();//多个定时器
 },
})

易错点:结束时间转换成时间戳时要特别特别注意把时间字符串的‘-'替换成‘/',不然在ios中有报错

温馨提示:定时器推荐使用setTimeout(),而不推荐setinterval

好了,看到这里单个或者多个倒计时显示功能就实现成功啦,具体样式可以根据自己需求修改即可。

为大家推荐现在关注度比较高的微信小程序教程一篇:《微信小程序开发教程》小编为大家精心整理的,希望喜欢。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
数组Array进行原型prototype扩展后带来的for in遍历问题
Feb 07 Javascript
javaScript复制功能调用实现方案
Dec 13 Javascript
js string 转 int 注意的问题小结
Aug 15 Javascript
jQuery往textarea中光标所在位置插入文本的方法
Jun 26 Javascript
浅谈js中同名函数和同名变量的执行问题
Feb 12 Javascript
vue调用高德地图实例代码
Apr 28 Javascript
VUE中的无限循环代码解析
Sep 22 Javascript
详解Node全局变量global模块
Sep 28 Javascript
vue2.0 axios跨域并渲染的问题解决方法
Mar 08 Javascript
详解.vue文件解析的实现
Jun 11 Javascript
原生JS实现随机点名项目的实例代码
Apr 30 Javascript
利用JS如何获取form表单数据
Dec 19 Javascript
微信小程序实现页面监听自定义组件的触发事件
Nov 01 #Javascript
uniapp微信小程序实现一个页面多个倒计时
Nov 01 #Javascript
uni-app使用countdown插件实现倒计时
Nov 01 #Javascript
uni-app实现获取验证码倒计时功能
Nov 01 #Javascript
uniapp电商小程序实现订单30分钟倒计时
Nov 01 #Javascript
详解JavaScript之Array.reduce源码解读
Nov 01 #Javascript
微信小程序实现星星评分效果
Nov 01 #Javascript
You might like
PHP脚本的10个技巧(7)
2006/10/09 PHP
php垃圾代码优化操作代码
2010/08/05 PHP
如何使用php输出时间格式
2013/08/31 PHP
php观察者模式应用场景实例详解
2017/02/03 PHP
asp函数split()对应php函数explode()
2019/02/27 PHP
PHP程序守护进程化实现方法详解
2020/07/16 PHP
打开新窗口关闭当前页面不弹出关闭提示js代码
2013/03/18 Javascript
javascript的回调函数应用示例
2014/02/20 Javascript
JS实现网页背景颜色与select框中颜色同时变化的方法
2015/02/27 Javascript
js编写贪吃蛇的小游戏
2020/08/24 Javascript
关于Jquery中的事件绑定总结
2016/10/26 Javascript
详解在Vue中如何使用axios跨域访问数据
2017/07/07 Javascript
Bootstrap Multiselect 常用组件实现代码
2017/07/09 Javascript
微信小程序url与token设置详解
2017/09/26 Javascript
解决npm管理员身份install时出现权限的问题
2018/03/16 Javascript
修改npm全局安装模式的路径方法
2018/05/15 Javascript
少女风vue组件库的制作全过程
2019/05/15 Javascript
vue-next/runtime-core 源码阅读指南详解
2019/10/25 Javascript
通过vue.extend实现消息提示弹框的方法记录
2021/01/07 Vue.js
json跨域调用python的方法详解
2017/01/11 Python
python基础教程项目五之虚拟茶话会
2018/04/02 Python
基于Django URL传参 FORM表单传数据 get post的用法实例
2018/05/28 Python
pytz格式化北京时间多出6分钟问题的解决方法
2019/06/21 Python
在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
2020/08/07 Python
python -v 报错问题的解决方法
2020/09/15 Python
Python列表嵌套常见坑点及解决方案
2020/09/30 Python
Python+MySQL随机试卷及答案生成程序的示例代码
2021/02/01 Python
利用CSS3实现动态的二级三级菜单效果实例源码
2017/01/04 HTML / CSS
HTML5 video 上传预览图片视频如何设置、预览视频某秒的海报帧
2018/08/28 HTML / CSS
房地产销售员的自我评价分享
2013/12/04 职场文书
小学老师寄语大全
2014/04/04 职场文书
安全教育演讲稿
2014/05/09 职场文书
小学语文业务学习材料
2014/06/02 职场文书
奶茶店创业计划书
2014/08/14 职场文书
学生抄袭作业的检讨书
2014/10/02 职场文书
Pytorch 中net.train 和 net.eval的使用说明
2021/05/22 Python