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


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 相关文章推荐
JavaScript实现检查页面上的广告是否被AdBlock屏蔽了的方法
Nov 03 Javascript
JavaScript使用Replace进行字符串替换的方法
Apr 14 Javascript
代码分析jQuery四种静态方法使用
Jul 23 Javascript
跟我学习javascript的prototype原型和原型链
Nov 18 Javascript
原生js封装二级城市下拉列表的实现代码
Jun 16 Javascript
BootStrap表单控件之文本域textarea
May 23 Javascript
layui表格 列自动适应大小失效的解决方法
Sep 06 Javascript
vue实现文字加密功能
Sep 27 Javascript
vue 解决文本框被键盘遮住的问题
Nov 06 Javascript
jQuery实现全选、反选和不选功能的方法详解
Dec 04 jQuery
JS实现旋转木马轮播图
Jan 01 Javascript
js中火星坐标、百度坐标、WGS84坐标转换实现方法示例
Mar 02 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
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
基于Laravel 5.2 regex验证的正确写法
2019/09/29 PHP
laravel框架实现为 Blade 模板引擎添加新文件扩展名操作示例
2020/01/25 PHP
phpmyadmin在宝塔面板里进不去的解决方案
2020/07/06 PHP
JS获取dom 对象 ajax操作 读写cookie函数
2009/11/18 Javascript
让JavaScript中setTimeout支持链式操作的方法
2015/06/19 Javascript
浅谈addEventListener和attachEvent的区别
2016/07/14 Javascript
详解Angular.js指令中scope类型的几种特殊情况
2017/02/21 Javascript
js实现产品缩略图效果
2017/03/10 Javascript
jQuery选择器中的特殊符号处理方法
2017/09/08 jQuery
js中url对象化管理分析
2017/12/29 Javascript
vue中进入详情页记住滚动位置的方法(keep-alive)
2018/09/21 Javascript
IE9 elementUI文件上传的问题解决
2018/10/17 Javascript
100行代码实现一个vue分页组功能
2018/11/06 Javascript
[41:17]完美世界DOTA2联赛PWL S3 access vs CPG 第二场 12.13
2020/12/17 DOTA
python实现爬虫统计学校BBS男女比例(一)
2015/12/31 Python
Python与人工神经网络:使用神经网络识别手写图像介绍
2017/12/19 Python
python selenium爬取斗鱼所有直播房间信息过程详解
2019/08/09 Python
python KNN算法实现鸢尾花数据集分类
2019/10/24 Python
python标准库os库的函数介绍
2020/02/12 Python
Python 解析pymysql模块操作数据库的方法
2020/02/18 Python
使用python matplotlib 画图导入到word中如何保证分辨率
2020/04/16 Python
django 连接数据库出现1045错误的解决方式
2020/05/14 Python
浅谈matplotlib 绘制梯度下降求解过程
2020/07/12 Python
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
Sunglasses Shop英国:欧洲领先的太阳镜在线供应商之一
2018/09/19 全球购物
运动会领导邀请函
2014/01/10 职场文书
责任书范本
2014/08/25 职场文书
2014年教师节演讲稿
2014/09/03 职场文书
2014年营业员工作总结
2014/11/18 职场文书
给老婆的道歉信
2015/01/20 职场文书
投标承诺函范文
2015/01/21 职场文书
护林员个人总结
2015/03/04 职场文书
会计实训总结范文
2015/08/03 职场文书
Python爬虫之爬取某文库文档数据
2021/04/21 Python
详解MySql中InnoDB存储引擎中的各种锁
2022/02/12 MySQL