uniapp中使用計時器setInterval的場景與方法
首先要區(qū)分setInterval和setTimeout
使用場景:
1.一般情況下 setTimeout() 用于延遲執(zhí)行某方法或功能;
2.setInterval() 則一般用于刷新表單,對于一些表單的假實時指定時間刷新同步。
定義:
1.setInterval() : 用于按照指定的周期(以毫秒計)來循環(huán)調(diào)用函數(shù)或計算表達式,直到 clearInterval() 被調(diào)用或窗口關(guān)閉
2.setTimeout(): 用于在指定毫秒數(shù)后再調(diào)用函數(shù)或者計算表達式(以毫秒為單位)
區(qū)別總結(jié):
setTimeout() 方法只運行一次,也就是說當達到設定的時間后就開始運行指定的代碼,運行完后就結(jié)束了,次數(shù)是一次。
setInterval() 是循環(huán)執(zhí)行的,即每達到指定的時間間隔就執(zhí)行相應的函數(shù)或者表達式,只要窗口不關(guān)閉或 clearInterval() 調(diào)用就會無限循環(huán)下去。
缺點總結(jié):
setInterval缺點:
1.使用setInterval時,某些間隔會被跳過;即使setInterval調(diào)用的方法報錯了,他仍然會繼續(xù)執(zhí)行。
2.無視網(wǎng)絡延遲,可能多個定時器會連續(xù)執(zhí)行
setTimeout缺點:
1.不能按時執(zhí)行
2.執(zhí)行動畫時它通過設定間隔時間來不斷改變圖像位置,達到動畫效果。但是容易出現(xiàn)卡頓、抖動的現(xiàn)象,原因是: settimeout 任務被放入異步隊列,只有當主線程任務執(zhí)行完后才會執(zhí)行隊列中的任務。
uniapp上使用:
//uniapp中的具體用法:我這里使用到了setInterval
data() {
return {
timer: null//定時器名稱
};
},
//一般在頁面需要的地方使用,這里我是放在了onshow()里
onShow() {
// console.log('onshow');
this.timer = setInterval(function() {
// 放入你自己的業(yè)務邏輯代碼
}, 3000);
},
//uniapp中onHide()能監(jiān)聽到頁面離開
onHide() {//離開頁面前清除計時器
// console.log('onHide');
clearInterval(this.timer);
this.timer = null;
},
這里我要說明一下,在uniapp 中要實現(xiàn)vue離開頁面銷毀定時器功能,百度了一大圈都說使用vue的beforeDestroy生命周期,如下:
//beforeDestroy為實例銷毀之前調(diào)用
beforeDestroy() {
if(this.timer) {
clearInterval(this.timer); //關(guān)閉
}
結(jié)果,根本就沒有用,依然關(guān)不掉,最后看到一個方法說是:通過$once這個事件偵聽器器在定義完定時器之后的位置來清除定時器,如下:
const timer = setInterval(() =>{ // 某些定時器操作 }, 500);
// 通過$once來監(jiān)聽定時器,在beforeDestroy鉤子可以被清除。
uni.$once('beforeDestroy', () => {
clearInterval(timer);
})
顯然,對我這里并沒有用,最后還是采用了 onHide()這個頁面生命周期才能及時清除
補充:uni-app 倒計時計時器
<text class="red">剩余時間:<text>{{remaining}}</text></text>export default {
data() {
return {
remaining: '', //顯示剩余時間
remainingd: '' //數(shù)據(jù)返回時間秒
}
},
onLoad() {
uni.showLoading(); //數(shù)據(jù)加載中
this.getmsglist();//第一次加載數(shù)據(jù)
},
methods: {
//獲取列表信息
getmsglist: function() {
var _self = this;
_self.goodsid = uni.getStorageSync('goodsid');
uni.request({
url: _self._apiurl + "/app/goods/getgoodsdetail",
method: 'POST',
header: {
'content-type': 'application/x-www-form-urlencoded'
},
data: {
openid: _self.openid,
token: _self.token,
},
success: (res) => {
console.log(res);
var data = res.data;
_self.remainingd = data.data.timestamp;
_self.jishiqi();//執(zhí)行一次倒計時,因為進入頁面有等待
setInterval(function() {
_self.jishiqi();
}, 1000)
uni.hideLoading(); //關(guān)閉加載
}
})
},
//倒計時計時器
jishiqi: function() {
var dj = this.remainingd;
if (dj <= 0) {
this.remaining = "已過期";
} else {
var ddf = this.djs(dj); //格式化過后的時間
this.remaining = ddf;
//當前時間減去時間
dj = dj - 1;
this.remainingd = dj;
}
},
//得到的秒換算成時分秒
djs: function(ms) {
var h = parseInt(ms / (60 * 60));
var m = parseInt((ms % (60 * 60)) / 60);
var s = (ms % (60 * 60)) % 60;
return h + ":" + m + ":" + s;
},
}
}總結(jié)
到此這篇關(guān)于uniapp中使用計時器setInterval的文章就介紹到這了,更多相關(guān)uniapp使用計時器setInterval內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
僅Firefox中鏈接A無法實現(xiàn)模擬點擊以觸發(fā)其默認行為
偶然發(fā)現(xiàn)之前寫的事件模塊在Firefox5中無法觸發(fā)A的默認行為了。IE/Opera/Firefox5中A具有click方法,因此模擬點擊直接調(diào)用click方法即可。2011-07-07
JavaScript實現(xiàn)控制打開文件另存為對話框的方法
這篇文章主要介紹了JavaScript實現(xiàn)控制打開文件另存為對話框的方法,實例分析了javascript實現(xiàn)文件另存為的技巧,非常具有實用價值,需要的朋友可以參考下2015-04-04
完美解決spring websocket自動斷開連接再創(chuàng)建引發(fā)的問題
下面小編就為大家?guī)硪黄昝澜鉀Qspring websocket自動斷開連接再創(chuàng)建引發(fā)的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03
JavaScript輕松創(chuàng)建級聯(lián)函數(shù)的方法示例
級聯(lián)函數(shù)也叫鏈式函數(shù),方法鏈一般適合對一個對象進行連續(xù)操作 (集中在一句代碼)。一定程度上可以減少代碼量,缺點是它占用了 函數(shù)的返回值。下面這篇文章主要給大家介紹了利用JavaScript如何輕松創(chuàng)建級聯(lián)函數(shù)的方法示例,需要的朋友可以參考借鑒。2017-02-02
js仿QQ中對聯(lián)系人向左滑動、滑出刪除按鈕的操作
這篇文章主要介紹了js仿QQ中對聯(lián)系人向左滑動、滑出刪除按鈕的操作,即編寫一個js向左滑動刪除 交互特效的插件,感興趣的小伙伴們可以參考一下2016-04-04

