微信小程序setinterval_簡單談談setTimeout與setInterval

感謝踩過的坑

sf社區的第一篇文章。

最近在做一個拍賣的微信小程序,用到了定時器setTimout和setInterval,簡單談談這兩個api。

setTimeout

最常見的用法就是第二種(第三種mdn文檔不推薦),如:

var timeoutId = setTimeout(function() {

console.log('hello world!')

},1000)

定時器是先等待1000ms再執行function的語句,而不是一開始就執行然后再等待。如果執行的語句需要用到this引用,需要在回調函數function上綁定this:function() {...}.bind(this),把this傳給回調函數,同作為該回調函數的this,使回調函數內外this的指向保持一致。或者用es6的箭頭函數() => {},也能起到同樣的作用。bind的用法詳見Function.prototype.bind()

用完定時器之后,要記得清除:clearTimeout(timeoutId)?這里的timeoutId是setTimeout返回的一個正整數編號,是定時器的唯一標識符。

setInterval

在我看來基本上可以當成setTimeout的升級版,就像setTimeout循環調用自身,用法也跟setTimeout一樣,用完是也要記得用clearInterval清掉定時器。底層原理或許會有些不同,這里就不深究。

下面是我在微信小程序倒計時組件:

// components/countdown.js

/**

* 倒計時組件

*/

Component({

/**

* 組件的屬性列表

*/

properties: {

durationInit: {

type: Number,

value: 0,

observer: function(newVal) { //監控duration初始值變動(看有沒有外部傳入新的時間)

this.initDuration(newVal)

}

}

},

/**

* 組件的初始數據

*/

data: {

duration: 0, //剩余時間,單位秒

timeDisplay: '' //展示時間

},

intervalId: null, //計時器Id,不需要渲染,放外面,免得影響性能

/**

* 組件銷毀了要清除計時

*/

detached() {

this.stopInterval(this.intervalId)

},

/**

* 組件的方法列表

*/

methods: {

// 設置時間

setTime: function(duration) {

if (duration <= 0) {

this.setData({

timeDisplay: `活動結束啦`

})

//this.data.timeDisplay = `活動結束啦,戳這里看看好東西~`

return false

}

var s = this.formatTime(duration % 60)

var m = this.formatTime(Math.floor(duration / 60) % 60)

var h = this.formatTime(Math.floor(duration / 3600) % 24)

var d = this.formatTime(Math.floor(duration / 3600 / 24))

var time = `${d}:${h}:${m}:${s}`

//寫入

this.setData({

timeDisplay: time

})

return true

},

//倒計時

countDown: function(duration) {

//有沒有倒計時的必要.第一次展示時間(這個很重要)

var canCountDown = this.setTime(duration)

if (canCountDown === true) {

var intervalId = setInterval(

function() {

//清除計時器

if (this.data.duration <= 0) {

this.stopInterval(intervalId)

}

this.setData({

duration: this.data.duration - 1

})

this.setTime(this.data.duration)

}.bind(this),

1000

)

this.intervalId = intervalId

}

},

//初始化剩余時間

initDuration: function(newVal) {

if (this.intervalId) {

//若有計時器,清除

this.stopInterval(this.intervalId)

}

this.setData({

duration: this.data.durationInit

})

this.countDown(newVal)

},

//清除計時器

stopInterval: function(intervalId) {

if (intervalId != null) {

clearInterval(intervalId)

this.intervalId = null

}

},

//格式化時間

formatTime(time) {

return time < 10 ? `0${time}` : `${time}`

}

}

})

最后想吐槽一下W3School,隨著學習的深入,發現W3School的坑真多,強烈建議不要看W3School學前端,要看MDN文檔。可能很多人的前端啟蒙就是W3School,我也是。名字跟W3C很像,還以為是非常專業的網站,然而后來發現跟W3C并沒有什么關系。W3School在baidu搜索排名非常高,被坑了,baidu也是同謀。現在早已擁抱google,清爽!

下面就拿setInterval的說明做例子,對比一下MDN和W3School,就知道后者有多坑了。

通過上面3張圖片,可以看出

1. W3School含糊其辭,解釋不清楚,不詳細。用的時候容易出問題

W3School:周期性執行...請告訴我如果先執行了回調函數,再等待1秒,再執行回調函數,這算不算得上周期性??

MDN:詳細指出函數的每次調用會在該延遲之后發生

2. 不推薦的用法沒有指出,文檔更新慢,權威性極低

W3School:連舉的例子都是不推薦的用法,用code代碼串。。。

MDN:詳細指出使用code不推薦,不僅如此,還發散性指出原因和eval()一樣,真的很貼心很友好了

以上圖片均來源于MDN和W3School

在最后,感謝踩過的坑,讓我成長!初來乍到,多多關照,希望能堅持寫技術博文。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533808.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533808.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533808.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python 注釋一段話_Python快速入門(一)

引言Python作為一個&#xff0c;目前最火的編程語言之一&#xff0c;已經滲透到了各行各業。它易學好懂&#xff0c;擁有著豐富的庫&#xff0c;功能齊全。人生苦短&#xff0c;就用Python。這個快速入門系列分為六篇&#xff0c;包含了Python大部分基礎知識&#xff0c;每篇閱…

linux ibus獲取窗體位置,Ubuntu 12.04 顯示ibus 的輸入框

在虛擬機中安裝了Ubuntu 12.04&#xff0c;系統是英文版本的&#xff0c;我能接受&#xff0c;但是苦于沒有中文輸入法。起先&#xff0c;我是安裝SCIM&#xff0c;結果我折騰了半天&#xff0c;發現其只能在lib-office下使用。firefox,文字編輯器中都不能調出SCIM。無奈將其卸…

transporter上傳卡正在交付_【iOS】Xcode11使用Transporter將APP上傳到App Store,卡在正在驗證APP...

問題&#xff1a;在使用Transporter時&#xff0c;會卡主&#xff0c;一直顯示正在驗證APP在這里插入圖片描述解決方案一&#xff1a;利用V-P-N在這里插入圖片描述使用安全上網(V-P-N)&#xff0c;雙擊打開iTMSTransporter&#xff0c;等待幾分鐘lichuangMacBook-Pro-3 ~ % /Ap…

python練手經典100例微盤_20個Python練手經典案例,能全做對的人確實很少!

100個Python練手小程序&#xff0c;學習python的很好的資料&#xff0c;覆蓋了python中的每一部分&#xff0c;可以邊學習邊練習&#xff0c;更容易掌握python。 如果你感覺學不會&#xff1f;莫慌&#xff0c;小編推薦大家加入群&#xff0c; 前面548中間377后面875&#xff0…

小紅帽linux各功能中英,英文短劇《小紅帽》劇本臺詞完整版---中英對照文本版...

大灰狼和小紅帽的故事紅帽第一場&#xff1a;小紅帽家 媽媽&#xff1a; (媽媽拿著一個籃子&#xff0c;把桌子上的水果放在籃子里) 小紅帽唱著歌&#xff0c;歡快地跑進來)Hi,mummy, what are you doing? 嘿&#xff0c;媽媽 你在什么&#xff1f; 媽媽&#xff1a; (一邊把水…

uipath循環datatable_UiPath之DataTable轉換為List和Array

今天給大家分享一下&#xff0c;如何將DataTable轉為List和Array&#xff0c;為此小U也花了不少時間研究&#xff0c;最后發現沒有那么復雜。先來說說List和Array的區別&#xff1a;List&#xff1a;就像一個鏈條&#xff0c;存儲數據的空間可以不連續。Array&#xff1a;就像一…

python批量下載文件教程_Python抓包菜鳥教程:批量下載圖片的方法,電腦和手機都能用...

筆者看上了一組圖集&#xff0c;然后準備一張一張下載時&#xff0c;瞄了一眼&#xff0c;這組圖集還有100&#xff0c;好吧&#xff0c;我酸了。 筆者就是試試工具&#xff0c;你們別像我這樣用&#xff0c;這么好的工具&#xff0c;做自媒體&#xff0c;那絕對了那如何批量下…

esxi掛載Linux的nfs盤,ESXi安裝centos7掛載群暉NFS

前段時間折騰了ESXi&#xff0c;然后無盡的折騰接踵而來&#xff0c;今天要說的是如何安裝centos7并掛載群暉虛擬機的NFS共享文件夾直接步入正題&#xff01;先是下載centos7鏡像&#xff0c;因為我是用來當服務器的&#xff0c;所以只需要minimal版即可【centos下載鏈接】自己…

python使用的編輯器_我用過的最好的python編輯器PyScripter

用了IDLE, PythonWin等幾個python編輯器&#xff0c;在代碼補全、參數提示等功能上都非常不滿意。 終于找到PyScripter并且試用了一下&#xff0c;代碼補全、參數提示等功能非常強大。這個功能其實非常重要&#xff0c;可以大大提高開發效率&#xff0c;減少出錯。很滿意.PyScr…

linux is not unix由來,一些奇怪的 unix 指令名字的由來(轉)

一些奇怪的 unix 指令名字的由來(轉)[more]一些奇怪的 unix 指令名字的由來awk "Aho Weinberger and Kernighan"這個語言以作者 Al Aho, Peter Weinberger 和 Brian Kernighan 的姓來命名。grep "Global Regular Expression Print"grep 來自 ed 的列印所…

python discuz_pythonDiscuz發帖器的實現

網絡技術需要大家共同分享&#xff0c;不能閉門造車&#xff0c;下面是bj-dnsCom提示&#xff1a;首先要清楚discuz論壇發帖的流程&#xff0c;簡單地說就是以下流程:進入登錄頁 ->登錄 -> 進入版面 ->發帖 首先要清楚discuz論壇發帖的流程&#xff0c;簡單地說就是以…

基于linux的業設計課題,基于linux下智能手機的設計與制作 畢業設計.doc

本科生畢業論文(設計)題 目&#xff1a; 基于linux下智能手機的設計與制作目錄1. 緒論11.1 嵌入式系統的應用前景11.2linux操作系統21.2.1Linux介紹22.硬件、軟件介紹32.1S3c2440知識32.1.1S3c2440系統結構介紹32.1.2arm實驗儀介紹72.2 GPRS無線模組92.2.1 GPRS概述及工作原理9…

excel文件導入hive亂碼_將excel中的數據導入hive

步驟一&#xff1a;將excel另存為txt文檔(文本文件(制表符分割))假設名字為CompanyCode.txt步驟二&#xff0c;將該txt文件導入Linux指定目錄中步驟三&#xff0c;轉換編碼格式&#xff0c;在指定目錄下執行如下命令&#xff1a;piconv -f gb2312 -t UTF-8 CompanyCode.txt &g…

傳統的6d位姿估計fangfa1_李飛飛團隊最新論文:基于anchor關鍵點的類別級物體6D位姿跟蹤...

點擊上方“3D視覺工坊”&#xff0c;選擇“星標”干貨第一時間送達簡介作者提出了一種基于RGB-D的深度學習方法6PACK&#xff0c;能夠實時的跟蹤已知類別物體。通過學習用少量的3D關鍵點來簡潔地表示一個物體&#xff0c;基于這些關鍵點&#xff0c;通過關鍵點匹配來估計物體在…

c語言的程序結構語序,第3章 C語序結構.doc

第3章 C語序結構第三章 基本語句本章要求:1.表達式語句,空語句,復合語句2.數據的輸入與輸出,輸入,輸出函數的調用&#xff23;語句概述&#xff23;程序的執行部分是由語句組成的。 程序的功能也是由執行語句實現的。3.1 賦值語句賦值語句: 是由賦值表達式再加上分號構成的表達…

安卓system鏡像分區_玩機愛好者想要的PT分區到底是什么?可以使現有的安卓系統更快!...

小編第一次看見PT分區這個詞。就比較好奇他到底是什么神仙技術。今天&#xff0c;小編給大家科普一下&#xff0c;可能小編理解的也不是特別準確&#xff0c;請各位諒解&#xff01;&#xff01; 歡迎關注小編。各位玩機愛好者總是沉浸在各種ROM包、第三發Rec&#xff0c;以及各…

計算器軟件C語言課程設計實驗報告,c簡單計算器實驗報告_相關文章專題_寫寫幫文庫...

時間&#xff1a;2019-05-15 12:55:15 作者&#xff1a;admin計算器實驗報告班級&#xff1a; 07計本(1)班姓名&#xff1a; 王林學號&#xff1a; 20706031047指導老師&#xff1a; 韓靜一、 需求分析(1)制作一個計算器界面工程&#xff0c;有數字運算符等鍵&#xff0c;輸入表…

python求和1到100_python等差數列求和公式前 100 項的和實例

python等差數列求和公式前 100 項的和實例 最近跑去學了下python,一個很簡單的題&#xff0c;結果發現數學公示忘了&#xff0c;在不用for循環的情況下居然有些懵&#xff0c;記錄為下.. 題&#xff1a;等差數列可以定義為每一項與它的前一項的差等于一個常數&#xff0c;可以用…

android mqtt詳解_Android mqtt入門 Android studio(轉)

Android mqtt入門 Android studio2018年04月09日 14:02:30 hbw020 閱讀數&#xff1a;1564分享 mqtt簡單使用介紹&#xff1a;1、as創建工程2、官網下載mqtt支持包放入lib文件&#xff0c;點擊打開鏈接&#xff0c;https://repo.eclipse.org/content/repositories/paho-release…

jupyter kernel_新鄉聯通案例分享:Jupyter開發環境配置的常用技巧

Jupyter開發環境配置的常用技巧新鄉聯通網管中心 邢少華Python開發環境中&#xff0c;大部分人使用的是Jupyter&#xff0c;在Jupyter中有幾個令人困擾的問題&#xff1a;1. Jupyter的默認打開目錄如何修改2. Jupyter默認使用的瀏覽器如何修改3. 好用的Jupyter插件如何安裝4.…