在使用之前需要先在page页引入wxTimer.js文件(这里我将文件放在/utils)

let timer = require('../../utils/wxTimer.js');

然后就可以使用啦

调用如下:

let wxTimer = new timer({
expired_at: "2018-9-27 23:28:00.14756",
complete: function () {
console.log("完成了")
},
expired: function () {
console.log("过期了(结束时间小于当前时间)")
},
})
wxTimer.start(this);
wxTimer.stop();

封装方法中因为用到page页的data,因此需要在调用start()的时候传入 this

在data中添加timer对象

data:{
timer: {
remaining: '00:00:00' }
}

在页面中就可以通过 timer.remaining 就可以显示倒计时

在调用wxTimer的时候,expired_at传入的值需要特别留意。

在小程序开发中,ios是个很头疼的事情,下面就“时间”来简单的说一下

  • 对于上面代码中提到的 2018-9-27 23:28:00.14756

    • 在ios中是不支持‘-’的,应该替换为 '/'

    • 还有就是在ios中不支持 ‘.’ ,所以应该将'.'之后的数字去掉

在方法中这些都已经实现了,如果想了解详细可以查看代码

参数说明:

  • expired_at:倒计时结束时间

  • complete:回调函数,倒计时结束后调用改方法

  • expired:回调函数,当传入的时间过期时调用该方法

马云地址:https://gitee.com/WoRuoYiRuFeng/wx_smallProgram_countDown

附件(wxTimer.js)

 var wxTimer = function (initObj) {
initObj = initObj || {};
this.complete = initObj.complete; //结束任务(方法)
this.expired = initObj.expired; //过期执行(方法) this.intervarID; //计时ID
this.expired_at = initObj.expired_at || "00:00:00"; //过期时间
} wxTimer.prototype = {
//开始
start: function (self) {
let that = this;
let expired_at = new Date(that.expired_at.replace(/-/g, "/")).getTime();
// expired_at = new Date(expired_at).getTime(); // ios下不执行,返回为null
let nowTime = new Date().getTime();
let remaining = (expired_at - nowTime); //计算剩余的毫秒数
// 过期
if (remaining < 0) {
if (that.expired) {
that.expired();
}
return
}
function begin() {
// 过期
// if (remaining < 0) {
// if (that.expired) {
// that.expired();
// }
// that.stop();
// }else{ let hours = parseInt(remaining / 1000 / 60 / 60 % 24, 10); //计算剩余的小时
let minutes = parseInt(remaining / 1000 / 60 % 60, 10);//计算剩余的分钟
let seconds = parseInt(remaining / 1000 % 60, 10);//计算剩余的秒数
hours = checkTime(hours);
minutes = checkTime(minutes);
seconds = checkTime(seconds);
// 结束任务
if (hours <= 0 && minutes <= 0 && seconds <= 0) {
if (that.complete) {
that.complete();
}
that.stop();
}
if (hours >= 0 || minutes >= 0 || seconds >= 0) {
self.setData({
['timer.remaining']: hours + ":" + minutes + ":" + seconds
});
}
remaining = remaining - 1000;
// }
}
function checkTime(timer){
if (timer < 10){
timer = "0" + timer;
}
return timer;
}
// begin();
this.intervarID = setInterval(begin, 1000);
},
//结束
stop: function () {
clearInterval(this.intervarID);
}
} module.exports = wxTimer;

小程序实现倒计时:解决ios倒计时失效(setInterval失效)的更多相关文章

  1. 关于微信小程序开发环境苹果IOS真机预览报SSL协议错误问题解决方案

                              微信小程序开发环境苹果IOS真机预览报SSL协议错误问题 原文来自:https://blog.csdn.net/qq_27626333/articl ...

  2. 小程序clearinterval无效解决

    小程序clearinterval无效解决 小程序clearinterval清除定时器无效,原因是定时器使用与清除方法不对导致的,我们应将定时器绑定变量,这样在关闭页面清空定时器clearinterva ...

  3. 微信小程序+PHP:动态显示项目倒计时(格式:4天7小时58分钟39秒)

    1.一般我们说的显示秒杀都是指的单条数据,循环我没做. 效果: 2.wxml代码: <p class="endtime_act">距报名截止还有: <block ...

  4. 微信小程序【获取验证码】倒计时效果

    最近开始接触微信小程序,会记录一些相关的小功能——例如这次是点击[获取验证码]按钮出现的倒计时效果. 原文: http://blog.csdn.net/Wu_shuxuan/article/detai ...

  5. 关于小程序bindregionchange事件在IOS崩溃的问题

    先说下原因,我在bindregionchange事件触发函数中设置了经纬度,而latitude和longitude是绑定在map组件上的,滑动地图的过程中重新设置了地图中心点的经纬度,会导致地图本身的 ...

  6. 微信小程序单向数据流解决

    1. 小程序中没有vue中v-model一样的双向数据机制,并且小程序也不像vue那样的进行 实时的数据驱动视图. 小程序页面数据加载完成后再去改变data中的数据页面是 不会有变化的. 2. 解决: ...

  7. 小程序 ----踩坑 ---安卓iOS兼容等

    关于小程序一些小功能的代码都在这个GitHub上,感兴趣的可以去看看,https://github.com/huihuijiang/miniProgram目前有:列表左滑删除,拖拽浮标 一.小程序坑1 ...

  8. 微信小程序图片变形解决方法

    微信小程序的image标签中有个mode属性,使用aspectFill即可 注:image组件默认宽度300px.高度225px mode 有效值: mode 有 13 种模式,其中 4 种是缩放模式 ...

  9. 小程序使用wxs解决wxml保留2位小数问题

    1.出现溢出表现 从图中可以看到数字超出了很长长度.代码里面是如下这样的.为什么在0.35出现?或者一些相成的计算出现? 而 0.34却不会.(wap.0834jl.com) 0.41 也会出现,好像 ...

随机推荐

  1. Linux centosVMware su命令、sudo命令、限制root远程登录

    一.su命令 Linux系统中有些事情只有root用户才能做,普通用户不能做,这时候就需要临时切换到root身份了. [root@davery ~]# whoamiroot [root@davery ...

  2. P3381 【模板】最小费用最大流(spfa板子)

    #include<bits/stdc++.h> using namespace std; #define lowbit(x) ((x)&(-x)) typedef long lon ...

  3. 严重: Exception loading sessions from persistent storage

    2011-11-24 10:05:00|  分类: java学习|举报|字号 订阅     当tomcat启动的时候出现下面错误: [ERROR] org.apache.catalina.sessio ...

  4. 六种方式实现hibernate查询,及IDE推荐

      这些天过的好乱,也许是因为考完试了,心里有些松懈吧.也许是最近发生的事对我有些触动吧.感觉自己都已经不懂自己了.面对一些人的教导,我很感激.因为很多话都对我有非常大的帮助和启发,也让我除了做技术, ...

  5. NOIP2017tg【逛公园】 题解

    先说点别的 emmm--,这是本蒟蒻的第一篇题解,大佬们勿喷QwQ(要不是看到写题解可以加贡献,我才--) 可以看到标签,是2017年提高的题目,好像是Day1T3,感觉提高考这样的题目挺好的,至少考 ...

  6. 【转】WdatePicker日历控件使用方法

    转                自:   https://www.cnblogs.com/yuhanzhong/archive/2011/08/10/2133276.html WdatePicke官 ...

  7. Matplotlib 安装

    章节 Matplotlib 安装 Matplotlib 入门 Matplotlib 基本概念 Matplotlib 图形绘制 Matplotlib 多个图形 Matplotlib 其他类型图形 Mat ...

  8. 部署 Prometheus Operator【转】

    本节在实践时使用的是 Prometheus Operator 版本 v0.14.0.由于项目开发迭代速度很快,部署方法可能会更新,必要时请参考官方文档. 下载最新源码 git clone https: ...

  9. python 聚类分析 k均值算法

    dataSet = [ #数据集 # 1 [0.697, 0.460], # 2 [0.774, 0.376], # 3 [0.634, 0.264], # 4 [0.608, 0.318], # 5 ...

  10. 剑指offer 把字符串转化为整数

    题目描述 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一个合法的数值则返回0 输入描述: 输入一个字符串,包括数字字母符号,可以为空 输出描述: 如果是合法 ...