問題描述:
一般計算驗證碼的思路是,採用定時器開啓60s進行倒計時,然後將60這個值進行遞減,將值賦值到顯示數據的那個變量上。這種方式在安卓上是沒問題的,因爲安卓切入後臺之後定時器還是會執行,所以時間的計算上不會有問題。但是ios不是,ios一旦切入後臺定時器就停了,切回來再繼續,所以上述的思路就會有問題,和真正經過的時間不一樣了。
解決思路:
爲了兼容所有設備,就必須要一直採用計算真實時間差的方式進行倒計時。這樣的話,在安卓上面通過計算真實時間差計時,時間沒問題。在ios設備上,切入後臺切回來的時候,定時器恢復,計算真實的時間差,然後設置上去,這樣就可以了。
code:
showCodeTimer() {
// 初始化顯示時間
this.codeTime = 60;
// 獲取點擊時間
const second = Math.floor(new Date().getTime() / 1000);
// end
this.timer = setInterval(() => {
// 獲取當前時間
const newSecond = Math.floor(new Date().getTime()/1000);
// 得到剩餘時間
const time = 60 - Math.round(newSecond - second);
// end
if (time < 1) {
// 時間超過了60s就幹掉定時器了
clearInterval(this.timer);
this.timer = null;
// 自己的邏輯
} else {
// 時間沒超過60s,就賦值給顯示時間變量
this.codeTime = time;
}
}, 1000);
},