mysql网站倒计时代码_微信公众号开发,实现倒计时的一个功能(纯代码)

以下是我自己编写的一个代码,功能是在微信公众号开发过程中实现倒计时的。效果如下,订单已提交,请在2分57秒内完成支付。纯代码解析。

07a754dc5c06115ea6ad636a00f04787.png

开始的思路没有考虑页面在后台运行以及锁屏等情况。代码如下:let interval = setInterval(() => {

let {staticTime} = this.state;

staticTime = staticTime - 1;

if (staticTime <= 0) {

clearInterval(interval);

this.setState({

tip:'支付超时',

staticTime:0

});

return;

}

let minutes = parseInt(staticTime/60);

let Seconds = staticTime%60;

let tip = '订单已提交,请在'+minutes+'分'+Seconds+'秒内完成支付';

this.setState({

tip:tip,

staticTime:staticTime

});

}, 1000);

后来测试发现锁屏或者把页面留在后台,计算就不对,于是把代码进行了如下改造。

let interval = setInterval(() => {

let {backGroundTime, staticTime} = this.state;

this.setState({

backGroundTime:0

});

staticTime = staticTime - backGroundTime - 1;

if (staticTime <= 0) {

clearInterval(interval);

this.setState({

tip:'支付超时',

staticTime:0,

});

return;

}

let minutes = parseInt(staticTime/60);

let Seconds = staticTime%60;

let tip = '订单已提交,请在'+minutes+'分'+Seconds+'秒内完成支付';

this.setState({

tip:tip,

staticTime:staticTime,

});

}, 1000);

this.listenPageShowHideHandle();

//计算页面在后台的时间

listenPageShowHideHandle = () =>{let {backGroundTime} = this.state;

let start, end;

let self = this;

document.addEventListener("visibilitychange", function() {

if(document.visibilityState == 'hidden'){

start = new Date().getTime();

}else if(document.visibilityState == 'visible'){

end = new Date().getTime();

backGroundTime = Math.floor((end - start)/1000);

self.setState({backGroundTime});

console.log('时间差:', backGroundTime);

}

console.log( document.visibilityState );

});

}改造之后发先问题依然存在。原因是:

You cannot continue to run javascript while the iPhone is sleeping using setTimeout(), however.When the phone is put to sleep, Safari will kill any running javascript processes using setTimeout(). Check out this answer here for some reasons why this is done.

**解决方案:**

订单生成的时候我们记录下这个时间为A, 时间间隔为B(3分钟内需要付款,B为3*60*1000),C为现在的时间。我们使用setInterval 每个1秒读取一下时间。那么倒计时时间 == A+B-C,代码如下

let interval = setInterval(()=>{

let {orderTime, staticTime} = this.state;

let nowTime = Date.now();

let sub = Math.floor((orderTime + staticTime - nowTime)/1000);

console.log('sub',sub);

if(sub<=0){

clearInterval(interval);

this.setState({

tip:'支付超时',

isFalse:true

});

return;

}

let minutes = parseInt(sub/60);

let Seconds = sub%60;

let tip = '订单已提交,请在'+minutes+'分'+Seconds+'秒内完成支付';

console.log(tip);

this.setState({

tip:tip,

isFalse:false

});

},1000);

apache php mysql

相关文章:

相关视频:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值