色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

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

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

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

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

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

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

具體實現(xiàn):

設計思路:在setTimeout中調(diào)用事件處理函數(shù),如果在定時器觸發(fā)函數(shù)執(zhí)行之前又觸發(fā)函數(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é)氣門;扼殺

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

定時器實現(xiàn)模式:定時器在延時時間執(zhí)行過后,重置為null, 定時器為null時,重新設置定時器,如此循環(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)

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

//節(jié)流函數(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();}}}

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

總結:

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

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

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

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

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

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

希望本文所述對大家JavaScript程序設計有所幫助。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 热e国产 | 怡红院最新免费全部视频 | 一区二区不卡在线 | 国产精品高清在线 | 国产亚洲精品影达达兔 | 亚洲最大黄网 | 性做久久久久久久免费看 | 美女扒开腿让男人桶 | 中文字幕综合在线 | 久久久久88色偷偷免费 | 最新亚洲精品国自产在线观看 | 久久国内精品自在自线软件 | 久久亚洲国产精品五月天 | 欧美jizzhd极品欧美 | 亚洲国产cao| 欧美成人免费午夜影视 | 日韩国产欧美在线观看一区二区 | 国产精品亚洲专一区二区三区 | 午夜在线播放免费人成无 | 黄色a站| 亚洲综合久| 久久草在线 | 暖暖免费高清日本一区二区三区 | 一级欧美| 欧美一区二区三区在线播放 | 久久综合给会久久狠狠狠 | 久久精品国产国产精品四凭 | 一级一片一a一片 | 日本强不卡在线观看 | 国产亚洲精品精品国产亚洲综合 | 久草视频网 | 牲欧美| 久久精品国产精品亚洲综合 | 国产精品久久久久久久久久日本 | 亚洲一区二区三区不卡视频 | 国产精品九九久久一区hh | 91亚洲自偷手机在线观看 | 国产成人亚洲综合91精品555 | 久久国产视频一区 | 俄罗斯18videosex性欧美成人 | 国产欧美综合在线一区二区三区 |