国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

js防抖函數(shù)和節(jié)流函數(shù)使用場(chǎng)景和實(shí)現(xiàn)區(qū)別示例分析

瀏覽:122日期:2024-05-13 09:21:20

本文實(shí)例講述了js防抖函數(shù)和節(jié)流函數(shù)使用場(chǎng)景和實(shí)現(xiàn)區(qū)別。分享給大家供大家參考,具體如下:

開發(fā)過程中,都遇到過某個(gè)事件被頻發(fā)觸發(fā)的場(chǎng)景,比如resize,scroll事件,input事件,而對(duì)應(yīng)的事件處理函數(shù)也會(huì)被高頻率調(diào)用,這時(shí)會(huì)增加瀏覽器負(fù)擔(dān),用戶體驗(yàn)也不好,這也是防抖函數(shù)和節(jié)流函數(shù)存在的意義和使用場(chǎng)景。

函數(shù)防抖(debounce):

持續(xù)觸發(fā)事件時(shí),在設(shè)定時(shí)間段內(nèi)沒有被觸發(fā),才去調(diào)用事件處理函數(shù),在設(shè)定時(shí)間段內(nèi)如果事件又被觸發(fā),則不調(diào)用事件處理函數(shù),并從觸發(fā)事件時(shí)間重新開始延時(shí)。

具體實(shí)現(xiàn):

設(shè)計(jì)思路:在setTimeout中調(diào)用事件處理函數(shù),如果在定時(shí)器觸發(fā)函數(shù)執(zhí)行之前又觸發(fā)函數(shù),清除定時(shí)器。

function debounce(fn, timeout){ timeout = timeout || 1000; let timer; return () => { if(timer){ clearTimeout(timer)} timer = setTimeout(() => { fn() },timeout) }} function printEvent(){ console.log(’1121212’)} window.addEventListener(’scroll’,debounce(printEvent,1000),false)

節(jié)流函數(shù)(throttle) throttle [’θrɑt(ə)l] 油門;節(jié)氣門;扼殺

當(dāng)事件被持續(xù)觸發(fā)時(shí),在設(shè)定時(shí)間內(nèi)只讓事件處理函數(shù)觸發(fā)一次。

定時(shí)器實(shí)現(xiàn)模式:定時(shí)器在延時(shí)時(shí)間執(zhí)行過后,重置為null, 定時(shí)器為null時(shí),重新設(shè)置定時(shí)器,如此循環(huán)

//節(jié)流函數(shù)function throttle(fn, range){ range = range || 1000; let timer; return () => { //console.log(111,typeof timer) if(!timer){ timer = setTimeout( () => {fn()timer = null },range) } }} window.addEventListener(’mousemove’,throttle(printEvent,1000),false)

時(shí)間戳實(shí)現(xiàn)模式:初始化時(shí)獲取時(shí)間,每次觸發(fā)事件時(shí)再次獲取時(shí)間,兩次時(shí)間間隔等于或大于設(shè)定時(shí)間,執(zhí)行事件,初始化時(shí)間重置為當(dāng)前時(shí)間,如此循環(huán)。

//節(jié)流函數(shù) 時(shí)間戳模式var throttle2 = function(func, delay) {var prev = Date.now();return function() {var context = this;var args = arguments;var now = Date.now();if (now - prev >= delay) {func.apply(context, args);prev = Date.now();}}}

也可以使用時(shí)間戳加定時(shí)器結(jié)合實(shí)現(xiàn):

總結(jié):

函數(shù)防抖:在無事件觸發(fā)后的設(shè)定時(shí)間執(zhí)行事件,將幾次操作合并為一此操作進(jìn)行。這樣一來,只有最后一次操作能被觸發(fā)。

函數(shù)節(jié)流:使得一定時(shí)間內(nèi)只觸發(fā)一次函數(shù)。原理是通過判斷是否到達(dá)一定時(shí)間來觸發(fā)函數(shù)。

區(qū)別: 函數(shù)節(jié)流不管事件觸發(fā)有多頻繁,都會(huì)保證在規(guī)定時(shí)間內(nèi)一定會(huì)執(zhí)行一次真正的事件處理函數(shù),而函數(shù)防抖只是在最后一次事件后才觸發(fā)一次函數(shù)。

比如在頁面的無限加載場(chǎng)景下,我們需要用戶在滾動(dòng)頁面時(shí),每隔一段時(shí)間發(fā)一次 Ajax 請(qǐng)求,而不是在用戶停下滾動(dòng)頁面操作時(shí)才去請(qǐng)求數(shù)據(jù)。這樣的場(chǎng)景,就適合用節(jié)流技術(shù)來實(shí)現(xiàn)。

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運(yùn)行工具:http://tools.jb51.net/code/HtmlJsRun測(cè)試上述代碼運(yùn)行效果。

更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《JavaScript常用函數(shù)技巧匯總》、《javascript面向?qū)ο笕腴T教程》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 久久99国产乱子伦精品免费 | 亚洲另类视频在线观看 | 精品国产呦系列在线看 | 国产成人精品免费视频大 | 亚洲 欧美 日韩 丝袜 另类 | 亚洲国产精品久久综合 | 三级久久 | 欧美成年黄网站色高清视频 | 久久精品视频亚洲 | 久久精品视频免费在线观看 | 中文字幕一区日韩在线视频 | 日本人的色道免费网站 | 韩国一级a毛片 | 亚洲综合在线视频 | 一级做a免费视频观看网站 一级做a爰 | 亚洲精品理论 | 国产欧美日韩综合精品一区二区 | 精品久久久中文字幕一区 | 免费一看一级欧美 | 久久有这有精品在线观看 | 王朝影院一区二区三区入口 | 亚洲精品中文字幕一区在线 | 亚洲高清视频免费 | 正在播放国产乱子伦视频 | 欧美一a级做爰 | 毛片免费观看日本中文 | 91精品一区二区三区在线播放 | 99re66热这里只有精品免费观看 | 亚洲视频欧美 | 欧美亚洲日本国产综合网 | 亚洲成人一区二区 | 一级毛片免费观看 | 国产男女爽爽爽爽爽免费视频 | 国产精品国产自线在线观看 | 免费特黄视频 | 最新亚洲情黄在线网站无广告 | 欧美性生交大片免费看 | 免费萌白酱国产一区二区三区 | 亚洲综合久久久久久888 | 久久免费视频99 | 99视频精品全部在线播放 |