摘要:如果對當(dāng)前元素的點擊事件處理加上的話,那么執(zhí)行順序就會改變?yōu)楦冈禺?dāng)前元素。這樣的結(jié)果會導(dǎo)致新內(nèi)容很晚才能渲染完成,很多時候我們需要讓界面先渲染完成之后在去調(diào)用引擎來執(zhí)行,那么可以使用來延遲引擎的調(diào)用
關(guān)于setTimeout的妙用 定義
在指定的延遲時間之后調(diào)用一個函數(shù)或執(zhí)行一個代碼片段
這個是setTimeout最主要的功能,但也是很坑的地方,首先javascript其實是運行在單線程的環(huán)境下,意味者定時器會在未來的某個時間支持,但是具體的執(zhí)行的時間并不能夠很準(zhǔn)確的運行,容易受到其它時間的影響,比如DOM的計算、事件的執(zhí)行、各種函數(shù)的執(zhí)行和運算。但是我們可以利用延遲執(zhí)行的一些特性來達到我們想要的功能。
window.setTimeout(callbask, delay, [param1, param2, ...])函數(shù)節(jié)流
程序運行過程中對某個函數(shù)調(diào)用次數(shù)很多導(dǎo)致界面不斷回流或者重排,這時候就需要對這個函數(shù)進行節(jié)流,比如監(jiān)聽touchmove、scroll事件等,可以限定函數(shù)在單位時間內(nèi)只執(zhí)行一次
var throttle = function(method, context) { clearTimeout(method.tId); method.tId = setTimeout(function(){ method.call(context); },100); }控制執(zhí)行
點擊事件是會產(chǎn)生冒泡,執(zhí)行的順序是當(dāng)前點擊元素->父元素->...->document,一直往上執(zhí)行到document。如果對當(dāng)前元素的點擊事件處理加上setTimeout的話,那么執(zhí)行順序就會改變?yōu)楦冈?>...->document->當(dāng)前元素。這樣就可以控制冒泡事件的執(zhí)行順序
var parent = document.getElementById("parent"); var child = document.getElementById("child"); document.body.addEventListener("click", function(e) { console.log("body"); }, false); parent.addEventListener("click", function(e) { console.log("parent"); }, false); child.addEventListener("click", function(e) { setTimeout(function() { console.log("child"); }, 0); }, false); /* *parent *body *child */構(gòu)建一個輪詢?nèi)蝿?wù)
javacsript中已經(jīng)有一個開啟輪詢的方法,就是setInterval,但是這種存在一個問題就是執(zhí)行間隔往往就不是你希望的間隔時間
比如有個輪詢?nèi)蝿?wù)間隔是100ms,但是執(zhí)行方法的時間需要450ms,那么在200ms、300ms、400ms本來是計劃中執(zhí)行任務(wù)的時間,瀏覽器發(fā)現(xiàn)第一個還未執(zhí)行完,那么就會放棄2、3、4次的任務(wù)執(zhí)行,并且在500ms之后再次執(zhí)行任務(wù),這樣的話,其實再次執(zhí)行的間隔就只有50ms。使用setTimeout構(gòu)造輪詢能保證每次輪詢的間隔
setTimeout(function(){ alert(1); setTimeout(arguments.callee, 100); },100)分塊處理耗時計算
瀏覽器給javascript的運行規(guī)定了內(nèi)存和時間,假如javascript運行的時間超過了規(guī)定時間,那么瀏覽器就會""報錯""
for(var i = 0; i < arr.length; i++){ //耗時很久的嵌套循環(huán)或者運算 doSomeing(arr[i]); }
假如在循環(huán)中做的處理的邏輯不是同步的話,那么可以把邏輯""分片""執(zhí)行
sertTimeout(function(){ var item = arr.shift(); dosomeing(item); if(arr.length <0 ){ setTimeout(arguments.callee, 100); } }, 100);延遲JS引擎的調(diào)用
GUI渲染線程和JS引擎的執(zhí)行之間是互斥,當(dāng)JS引擎執(zhí)行時GUI線程會被掛起,GUI更新會被保存在一個隊列中等到JS引擎執(zhí)行完畢時立即被執(zhí)行。這樣的結(jié)果會導(dǎo)致新內(nèi)容很晚才能渲染完成,很多時候我們需要讓界面先渲染完成之后在去調(diào)用JS引擎來執(zhí)行,那么可以使用setTimeout來延遲JS引擎的調(diào)用
var div = document.createElement("div"); div.setAttribute("style", "background-color:#233; width:100px; height:100px"); document.body.appendChild(div); setTimeout(function() { alert(1); }, 100);
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/80854.html
摘要:要是當(dāng)前代碼耗時很長,有可能要等很久,所以并沒有辦法保證,回調(diào)函數(shù)一定會在指定的時間執(zhí)行。需要監(jiān)聽文字改變,每一次改變都會調(diào)用一次回調(diào)函數(shù),現(xiàn)在需要的一種實現(xiàn)是在用戶停止鍵盤事件一段時間后,去發(fā)送一個請求。 1、開胃菜,setTimeout為何物 首先看一下w3school上面對于setTimeout的解釋 setTimeout(fn,millisec) 方法用于在指定的毫秒數(shù)后調(diào)用函...
摘要:下面是偽元素和偽元素的具體用法和使用規(guī)則作用在標(biāo)簽前后添加字符串使用規(guī)則后面一定要用把要添加的內(nèi)容括起來,否則是無法顯示的括號不一定需要添加。場景: 假如有一天,你的在寫一個前端項目,是關(guān)于一份點餐商家電話信息表,你啪塔啪塔地寫完了,突然間項目經(jīng)理跑過來找你,要求你在每一個商家的電話號碼前都添加一個電話符號,來使得電話號碼更直觀和頁面更美觀。這個時候你就糾結(jié)了,這不是折磨人嗎?這不是要我在...
摘要:所以,當(dāng)我們使用時,不能進行復(fù)雜數(shù)據(jù)類型的判斷,因為它調(diào)用的是,雖然也繼承自,但在上重寫了,而我們通過實際上是通過原型鏈調(diào)用了。 關(guān)于 toString 方法在有關(guān)js的開發(fā)中使用應(yīng)該是相當(dāng)廣泛的,這兩天在看jQuery的源碼,從 toString 本身了解與鞏固了不少知識,寫出來與大家一同分享。首先先上一段代碼: var arr=[1,2,3]; toString.call(arr)...
摘要:最近讀到了一篇介紹中的四種使用場景的文章,感覺總結(jié)的很好,所以我認(rèn)真讀了讀,并且動手實踐了其中的,與大家共享。 最近讀到了一篇介紹js中this的四種使用場景的文章,感覺總結(jié)的很好,所以我認(rèn)真讀了讀,并且動手實踐了其中的demo,與大家共享。原文鏈接:https://github.com/alsotang/n...遇到this,一直要記得這句:函數(shù)執(zhí)行時,this總是指向調(diào)用該函數(shù)的對...
摘要:右側(cè)展現(xiàn)對應(yīng)產(chǎn)品。我們使用命名為的對象表示過濾條件信息,如下此數(shù)據(jù)需要在組件中進行維護。因為組件的子組件和都將依賴這項數(shù)據(jù)狀態(tài)?;瘧?yīng)用再回到之前的場景,我們設(shè)計化函數(shù),進一步可以簡化為對于的偏應(yīng)用即上面提到的相信大家已經(jīng)理解了這么做的好處。 showImg(https://segmentfault.com/img/remote/1460000014458612?w=1240&h=663...
閱讀 2527·2021-09-26 10:18
閱讀 3401·2021-09-22 10:02
閱讀 3213·2019-08-30 15:44
閱讀 3340·2019-08-30 15:44
閱讀 1844·2019-08-29 15:25
閱讀 2590·2019-08-26 14:04
閱讀 2054·2019-08-26 12:15
閱讀 2449·2019-08-26 11:43