比如我们倒计时十分钟,打比方我们可以用当前时间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")//倒计时