关于setimeout和setinterval,倒计时时间过久,变慢掉帧问题

比如我们倒计时十分钟,打比方我们可以用当前时间8点加上10分钟,那就是说计时8点10分,可以用setimeout计时每秒计算一下,08:10减去目前的时间new Date()中间不就是我们还剩的时间吗,完美避开掉帧问题,因为每秒都是重新计算,当然缺点也是显而易见的负担重,不知道哪位大哥能指点一下更好解决方案。

光说没用上代码:

js

//纯数字倒计时

var TimeOut_yun

function myStopFunction() {

clearTimeout(TimeOut_yun);

}

//a为需要计时的秒数,比如10分钟是600s,那就a=600

function daojishi(a){

var curTime = new Date();

var addHour = new Date(curTime.setSeconds(curTime.getSeconds() + a))

timeFn(addHour,obj,but)

}

function timeFn(dateBegin,obj,but) {

//如果时间格式是正确的,那下面这一步转化时间格式就可以不用了

var dateEnd = new Date();//获取当前时间

var dateDiff = dateBegin - dateEnd.getTime();//时间差的毫秒数

var dayDiff = Math.floor(dateDiff / (24 * 3600 * 1000));//计算出相差天数

var leave1=dateDiff%(24*3600*1000) //计算天数后剩余的毫秒数

var hours=Math.floor(leave1/(3600*1000))//计算出小时数

//计算相差分钟数

var leave2=leave1%(3600*1000) //计算小时数后剩余的毫秒数

var minutes=Math.floor(leave2/(60*1000))//计算相差分钟数

//计算相差秒数

var leave3=leave2%(60*1000) //计算分钟数后剩余的毫秒数

var seconds=Math.round(leave3/1000)

var timeFn_a = (minutes*60+seconds)+"秒"

if(minutes<=0&&seconds<=0){

clearTimeout(TimeOut_yun);

$(obj).text('已超时')

}else{

TimeOut_yun=setTimeout(()=>{

timeFn(dateBegin,obj,but);

},1000);

}

}

 

调用:

daojishi(600,".yun_dialog .timeRun",".yun_dialog .but")//倒计时

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值