成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何理解JS事件的防抖與節(jié)流?

開發(fā) 前端
在平時(shí)的編碼過程中,當(dāng)紿瀏覽器注冊(cè)一個(gè)時(shí)間,經(jīng)常會(huì)遇到一些執(zhí)行次數(shù)非常頻繁的事件,如scroll,resize等,事件頻繁的執(zhí)行會(huì)導(dǎo)致瀏覽器進(jìn)行大量的計(jì)算而引發(fā)頁面卡頓假死的情況,為些我們需要通過一些手段來解決這個(gè)問題,所以就有了防抖和節(jié)流這兩個(gè)技術(shù)。

本文轉(zhuǎn)載自微信公眾號(hào)「新鈦云服」,作者方章和。轉(zhuǎn)載本文請(qǐng)聯(lián)系新鈦云服公眾號(hào)。

在平時(shí)的編碼過程中,當(dāng)紿瀏覽器注冊(cè)一個(gè)時(shí)間,經(jīng)常會(huì)遇到一些執(zhí)行次數(shù)非常頻繁的事件,如scroll,resize等,事件頻繁的執(zhí)行會(huì)導(dǎo)致瀏覽器進(jìn)行大量的計(jì)算而引發(fā)頁面卡頓假死的情況,為些我們需要通過一些手段來解決這個(gè)問題,所以就有了防抖和節(jié)流這兩個(gè)技術(shù)。

事件節(jié)流 throttle

是指在某段時(shí)間內(nèi),不管你觸發(fā)了多少次回調(diào)事件,我都只認(rèn)第一次,并在計(jì)時(shí)結(jié)束時(shí)給予響應(yīng),至于后面你再觸發(fā)多少次回調(diào)我都不會(huì)予以回應(yīng)。代碼實(shí)現(xiàn)如下:

  1. // fn執(zhí)行的函數(shù), interval是時(shí)間間隔的閾值, 意為多久后執(zhí)行,單位毫秒 
  2. function throttle(fn, interval) { 
  3. // 上一次觸發(fā)回調(diào)的時(shí)間 
  4. let last = 0 
  5.   
  6. return function () { 
  7.     let context = this 
  8.     let args = arguments 
  9.     let now = +new Date() 
  10.       
  11.     // 判斷上次觸發(fā)的時(shí)間和本次觸發(fā)的時(shí)間差是否小于設(shè)置的間隔時(shí)間 
  12.     if (now - last >= interval) { 
  13.     // 如果時(shí)間間隔大于我們?cè)O(shè)定的時(shí)間間隔閾值,則執(zhí)行回調(diào) 
  14.         last = now; 
  15.         fn.apply(context, args); 
  16.     } 
  17.   } 
  18. // 紿scroll事件增加節(jié)流 
  19. const newScroll = throttle(() => console.log('滾動(dòng)了'), 1000) 
  20. document.addEventListener('scroll', newScroll) 

事件防抖Debounce

與事件節(jié)流怡好相反,事件防抖只認(rèn)最后一次,不管你前面觸發(fā)了多少次我都不管,我只執(zhí)行你最后一次觸發(fā)事件的回調(diào),代碼實(shí)現(xiàn)如下:

  1. // fn執(zhí)行的函數(shù), delay是延遲多久執(zhí)行的時(shí)間, 意為多久后才觸發(fā)事件,單位毫秒 
  2. function debounce(fn, delay) { 
  3. let timer = null 
  4. return function () { 
  5.   let context = this 
  6.   let args = arguments 
  7.   // 每次事件被觸發(fā)時(shí),都去清除之前的舊定時(shí)器 
  8.   if(timer) { 
  9.       clearTimeout(timer) 
  10.   } 
  11.   timer = setTimeout(function () { 
  12.     fn.apply(context, args) 
  13.   }, delay) 
  14. const newScroll = debounce(() => console.log('滾動(dòng)了'), 1000) 
  15. document.addEventListener('scroll', newScroll) 

函數(shù)防抖的應(yīng)用場(chǎng)景

連續(xù)的事件,只需觸發(fā)一次回調(diào)的場(chǎng)景有:

搜索框搜索輸入。只需用戶最后一次輸入完,再發(fā)送請(qǐng)求

手機(jī)號(hào)、郵箱驗(yàn)證輸入檢測(cè)

窗口大小Resize。只需窗口調(diào)整完成后,計(jì)算窗口大小。防止重復(fù)渲染。

函數(shù)節(jié)流的應(yīng)用場(chǎng)景

間隔一段時(shí)間執(zhí)行一次回調(diào)的場(chǎng)景有: 

  • 滾動(dòng)加載,加載更多或滾到底部監(jiān)聽
  • 百度搜索框,搜索聯(lián)想功能
  • 高頻點(diǎn)擊提交,表單重復(fù)提交

 

責(zé)任編輯:武曉燕 來源: 新鈦云服
相關(guān)推薦

2023-12-18 07:37:17

JavaScript防抖節(jié)流

2023-12-21 08:51:37

防抖節(jié)流Vue.js

2021-11-19 09:01:09

防抖節(jié)流前端

2025-06-19 00:02:00

防抖節(jié)流函數(shù)

2022-04-01 07:52:42

JavaScript防抖節(jié)流

2024-10-12 09:33:24

消息隊(duì)列多線程并行編程

2024-03-08 08:26:20

防抖節(jié)流delay?

2022-02-22 08:29:59

Vue前端防抖

2021-05-27 09:00:00

Node.js開發(fā)線程

2022-05-15 22:08:58

ReactHookdebounce

2025-05-09 08:00:00

JavaScript代碼防抖節(jié)流

2017-04-25 16:20:10

頁面優(yōu)化滾動(dòng)優(yōu)化

2021-12-13 07:50:14

前端性能優(yōu)化

2024-06-14 09:30:58

2024-01-05 08:49:15

Node.js異步編程

2024-05-28 09:26:46

2016-10-20 19:07:10

Javascript事件冒泡與捕獲

2017-08-16 10:36:10

JavaScriptNode.js事件驅(qū)動(dòng)

2024-07-01 08:27:05

KeyAndroid按鍵事件

2024-08-29 15:26:21

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 四虎永久免费地址 | 色在线看 | 欧美三级视频 | 高清av电影 | 欧美日韩网站 | 中文字幕精品一区久久久久 | 亚洲欧美久久 | 日韩在线播放av | a级片在线观看 | 天天舔天天 | 美女视频一区二区三区 | 欧美性jizz18性欧美 | 一区二区视屏 | www.久久久久久久久久久 | 国产精品久久久久久中文字 | 国产一区二区影院 | 成人午夜高清 | 欧美日韩一区二区三区视频 | 九九精品网 | 精品成人 | 国产精品久久一区二区三区 | 日韩国产中文字幕 | 亚洲天堂精品一区 | 国产欧美一区二区三区日本久久久 | 欧美黄色网络 | 日韩一区在线播放 | 国产美女精品视频 | 日韩国产三区 | h视频网站在线观看 | 国产二区视频 | 一区二区三区日韩 | 在线成人免费av | 黄色在线免费观看 | 成人免费大片黄在线播放 | 国产精品一区二区在线 | 久久天堂 | 欧美高清dvd | 日批av| www国产成人免费观看视频,深夜成人网 | 日韩三片 | 国产视频第一页 |