在使用之前需要先在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. C# 篇基础知识5——委托和事件

    事件处理程序是基于“委托”机制运行的. 1.委托 (1)委托的定义和使用 有时需要将一个函数作为另一个函数的参数,这时就要用到委托(Delegate)机制.例如设计一个马戏表演函数: //定义委托 d ...

  2. sklearn中的多项式回归算法

    sklearn中的多项式回归算法 1.多项式回归法多项式回归的思路和线性回归的思路以及优化算法是一致的,它是在线性回归的基础上在原来的数据集维度特征上增加一些另外的多项式特征,使得原始数据集的维度增加 ...

  3. HiBench成长笔记——(10) 分析源码execute_with_log.py

    #!/usr/bin/env python2 # Licensed to the Apache Software Foundation (ASF) under one or more # contri ...

  4. Python测试进阶——(5)Python程序监控指定进程的CPU和内存利用率

    用Python写了个简单的监控进程的脚本monitor190620.py,记录进程的CPU利用率和内存利用率到文件pid.csv中,分析进程运行数据用图表展示. 脚本的工作原理是这样的:脚本读取配置文 ...

  5. vue的自定义

    自定义组件 组件是可以被复用的页面的零件,其实就是一个插件,只是在vue里叫组件 先看看别人的组件 vant element Mint iView 去试试上面的组件,都是有脚手架版和直接引入使用的版本 ...

  6. 页面的html调试

    点击页面按下键盘的F12,或者鼠标右键选择检查(N) 会弹出一个窗口,这个窗口就是调试窗口 如上图所示,第一个图标是标签元素选择器,点击使用后,在页面上移动,会在Elements的区域找到你鼠标选中的 ...

  7. 066、Java面向对象之以分步的方式实例化对象

    01.代码如下: package TIANPAN; class Book { // 定义一个新的类 String title; // 书的名字 double price; // 书的价格 public ...

  8. parameterType和resultType

    在MyBatis中,我们通过parameterType完成输入映射(指将值映射到sql语句的占位符中,值的类型与dao层响应方法的参数类型一致),通过resultType完成输出映射(从数据库中输出, ...

  9. Mybatis 学习一

    一.mybatis是什么 mybatis是一个持久层的框架,它可以完全替代JDBC,同时提供接口编程.它访问DAO层是不需要实现类的,只需要一个接口和XML文件(或注解).mybatis让程序将主要精 ...

  10. USB2.0主机控制器 UPD720114 简单详解

    UPD720114 是符合 USB 2.0规格的集线器控制器,适用于“符合生态原则的解决方案”.这种小型封装的控制器集成了核心逻辑电路的2.5 V 内部电压调整器.终端电阻器,减少了所需要的外部组件的 ...