小程序实现倒计时:解决ios倒计时失效(setInterval失效)
在使用之前需要先在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失效)的更多相关文章
- 关于微信小程序开发环境苹果IOS真机预览报SSL协议错误问题解决方案
微信小程序开发环境苹果IOS真机预览报SSL协议错误问题 原文来自:https://blog.csdn.net/qq_27626333/articl ...
- 小程序clearinterval无效解决
小程序clearinterval无效解决 小程序clearinterval清除定时器无效,原因是定时器使用与清除方法不对导致的,我们应将定时器绑定变量,这样在关闭页面清空定时器clearinterva ...
- 微信小程序+PHP:动态显示项目倒计时(格式:4天7小时58分钟39秒)
1.一般我们说的显示秒杀都是指的单条数据,循环我没做. 效果: 2.wxml代码: <p class="endtime_act">距报名截止还有: <block ...
- 微信小程序【获取验证码】倒计时效果
最近开始接触微信小程序,会记录一些相关的小功能——例如这次是点击[获取验证码]按钮出现的倒计时效果. 原文: http://blog.csdn.net/Wu_shuxuan/article/detai ...
- 关于小程序bindregionchange事件在IOS崩溃的问题
先说下原因,我在bindregionchange事件触发函数中设置了经纬度,而latitude和longitude是绑定在map组件上的,滑动地图的过程中重新设置了地图中心点的经纬度,会导致地图本身的 ...
- 微信小程序单向数据流解决
1. 小程序中没有vue中v-model一样的双向数据机制,并且小程序也不像vue那样的进行 实时的数据驱动视图. 小程序页面数据加载完成后再去改变data中的数据页面是 不会有变化的. 2. 解决: ...
- 小程序 ----踩坑 ---安卓iOS兼容等
关于小程序一些小功能的代码都在这个GitHub上,感兴趣的可以去看看,https://github.com/huihuijiang/miniProgram目前有:列表左滑删除,拖拽浮标 一.小程序坑1 ...
- 微信小程序图片变形解决方法
微信小程序的image标签中有个mode属性,使用aspectFill即可 注:image组件默认宽度300px.高度225px mode 有效值: mode 有 13 种模式,其中 4 种是缩放模式 ...
- 小程序使用wxs解决wxml保留2位小数问题
1.出现溢出表现 从图中可以看到数字超出了很长长度.代码里面是如下这样的.为什么在0.35出现?或者一些相成的计算出现? 而 0.34却不会.(wap.0834jl.com) 0.41 也会出现,好像 ...
随机推荐
- 微信小程序request请求实例,网络请求。
最近微信小程序开始开放测试了,小程序提供了很多api,极大的方便了开发者,其中网络请求api是wx.request(object),这是小程序与开发者的服务器实现数据交互的一个很重要的api. 官方参 ...
- Day4-B-最短路径问题 HDU3790
给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. Input输入n,m,点的编号是1~n,然后是m行 ...
- intel关于spark gc的优化建议
Apache Spark由于其出色的性能.简单的接口和丰富的分析和计算库而获得了广泛的行业应用.与大数据生态系统中的许多项目一样,Spark在Java虚拟机(JVM)上运行.因为Spark可以在内存中 ...
- logback日志
一.什么是日志框架? 是一套能够实现日志输出的工具包 能够描述系统运行状态的所有时间都可以算作日志 用户下线,接口超时,数据崩溃 二.日志框架的能力 1.定制输出目标(文件,回滚策略,数据库,网络的第 ...
- 复习hibernate
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任何使用JDB ...
- 记-ItextPDF+freemaker 生成PDF文件---导致服务宕机
摘要:已经上线的项目,出现服务挂掉的情况. 介绍:该服务是专门做打印的,业务需求是生成PDF文件进行页面预览,主要是使用ItextPDF+freemaker技术生成一系列PDF文件,其中生成流程有:解 ...
- 065、Java面向对象之定义一个Book类,在主类中使用Book类
01.代码如下: package TIANPAN; class Book { // 定义一个新的类 String title; // 书的名字 double price; // 书的价格 public ...
- 013.Oracle数据库,SUBSTR取子字符串
/*Oracle数据库查询日期在两者之间*/ SELECT EXPIRE_DATE , SUBSTR(EXPIRE_DATE , , ) FROM ME_EO WHERE ( ISSUE_DATE B ...
- flutter之VSCode下Flutter常用终端命令行
https://www.cnblogs.com/lxlx1798/p/11049922.html 梁飞宇 [Flutter学习]之VSCode下Flutter常用终端命令行 Flutter 常用命令行 ...
- 获取选中行中的数据提取并且保存到txt
function getchcount(query: TADOQuery): Integer;var i:integer;begin i:=0; with Query do begin Query.F ...