摘要:在微信公眾號開發過程中要實現倒計時的一個功能。原因是解決方案訂單生成的時候我們記錄下這個時間為,時間間隔為分鐘內需要付款,為,為現在的時間。那么倒計時時間,代碼如下支付超時訂單已提交,請在分秒內完成支付
在微信公眾號開發過程中要實現倒計時的一個功能。效果如下:
開始的思路沒有考慮頁面在后臺運行以及鎖屏等情況。代碼如下:
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);
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/108126.html
摘要:微信小程序應用號開發資源匯總文檔工具教程代碼插件組件文檔從搭建一個微信小程序開始小程序開發文檔小程序設計指南工具小程序開發者工具官方支持微信小程序實時預覽的支持的微信小程序組件化開發框架轉在線工具小程序云端增強社區微信小程序 微信(小程序or應用號)開發資源匯總-文檔-工具-教程-代碼-插件-組件 文檔 從搭建一個微信小程序開始 小程序開發文檔 小程序設計指南 工具 小程序開發者...
摘要:網上有很多前端的學習路徑文章,大多是知識點羅列為主或是資料的匯總,數據量讓新人望而卻步。天了解一個前端框架。也可以關注微信公眾號曉舟報告,發送獲取資料,就能收到下載密碼,網盤地址在最下方,獲取教程和案例的資料。 前言 好的學習方法可以事半功倍,好的學習路徑可以指明前進方向。這篇文章不僅要寫學習路徑,還要寫學習方法,還要發資料,干貨滿滿,準備接招。 網上有很多前端的學習路徑文章,大多是知...
摘要:微信小程序中的每一個頁面的路徑頁面名都需要寫在的中,且中的第一個頁面是小程序的首頁。真機運行截圖運行于,微信版本功能能夠計算里程時間實時獲取跑步路徑有些粗糙思路主要使用了微信小程序的獲取位置和地圖組件。 首發地址 一、準備工作 1、注冊一個小程序賬號,得用一個沒注冊過公眾號的郵箱注冊。2、注冊過程中需要很多認證,有很多認證,比較繁瑣,如果暫時只是開發測試,不進行提審、發布的話,只要完成...
閱讀 1005·2023-04-26 01:47
閱讀 1684·2021-11-18 13:19
閱讀 2053·2019-08-30 15:44
閱讀 668·2019-08-30 15:44
閱讀 2307·2019-08-30 15:44
閱讀 1243·2019-08-30 14:06
閱讀 1430·2019-08-30 12:59
閱讀 1908·2019-08-29 12:49