微信公眾號開發,實現倒計時的一個功能(純代碼)

以下是我自己編寫的一個代碼,功能是在微信公眾號開發過程中實現倒計時的。效果如下,訂單已提交,請在2分57秒內完成支付。純代碼解析。

1.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

相關文章:

微信公眾號授權設置,微信公眾授權

微信公眾號點擊菜單即可打開并登錄微站的實現方法

相關視頻:

傳智、黑馬微信公眾平臺開發視頻教程

以上就是微信公眾號開發,實現倒計時的一個功能(純代碼)的詳細內容,更多請關注龍方網絡其它相關文章!

鄭重聲明:本文版權包含圖片歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們([email protected])修改或刪除,多謝。

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

留言與評論(共有 0 條評論)
   
驗證碼:
彩票店