摘要:函數的節流當持續觸發事件時,保證一定時間段內只調用一次事件處理函數。也就是一個函數執行一次后,只有大于設定的執行周期后才會執行第二次。記憶法讓函數執行者冷靜下來后不一直抖動后,才真正執行。
1.函數的節流
當持續觸發事件時,保證一定時間段內只調用一次事件處理函數。也就是一個函數執行一次后,只有大于設定的執行周期后才會執行第二次。
記憶法:聯系到水流的流量,我想讓你1s只流出多少水你就只能流多少水,多的水流只能等到下個周期才能流出。
應用場景:如用戶不斷滑動滾輪,規定1s只能真正下滑一次,你滑再多也沒用,只能等到下個周期你再滑才有用。
實現原理:
A:用函數的閉包來鎖住上一執行的時間,在用這一次執行的時間相比,大于設定的間隔時間則執行
B:也可以直接把lasTime放到全局去,不用閉包但這樣就不好在事件監聽的時候傳遞參數delay只能寫死
這里我節流用閉包寫,防抖就不用閉包了
用閉包就有一個問題,this的指向會非常復雜:
1.throttle函數的執行環境具有全局性,內部this通常是指向window的,然后返回一個匿名函數。
2.返回的匿名函數綁定了事件,this指向監聽的元素(document)
3.fn其實與上面返回匿名函數形成了閉包,且fn也其實是一個匿名函數,匿名函數的執行具有全局性,fn內部this應該指向window
4這里用apply修正this指向,使fn內部的this重新指向document
當持續觸發事件時,一定時間段內沒有再觸發事件,事件處理函數才會執行一次,如果設定的時間到來之前,又一次觸發了事件,就重新開始延時,比如頻繁觸發的某一函數,防抖可以只讓最后一次執行。記憶法:讓函數執行者冷靜下來后(不一直抖動后),才真正執行。
應用場景:用戶多次點擊提交表單
不用閉包后結構會很簡單
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/53780.html
摘要:文件為函數要傳入的參數返回事件處理函數添加事件監聽節流函數一般用于事件的情況較多,因為這些事件的觸發是連續性的,需要在一個時間間隔內只觸發一次。 showImg(https://segmentfault.com/img/remote/1460000018998747); 閱讀原文 前言 在前端開發當中我們經常會綁定一些事件觸發的某些程序執行,有時這些事件會連續觸發,如瀏覽器窗口 s...
摘要:函數的節流當持續觸發事件時,保證一定時間段內只調用一次事件處理函數。也就是一個函數執行一次后,只有大于設定的執行周期后才會執行第二次。記憶法讓函數執行者冷靜下來后不一直抖動后,才真正執行。 1.函數的節流 當持續觸發事件時,保證一定時間段內只調用一次事件處理函數。也就是一個函數執行一次后,只有大于設定的執行周期后才會執行第二次。記憶法:聯系到水流的流量,我想讓你1s只流出多少水你就只能...
摘要:函數的節流當持續觸發事件時,保證一定時間段內只調用一次事件處理函數。也就是一個函數執行一次后,只有大于設定的執行周期后才會執行第二次。記憶法讓函數執行者冷靜下來后不一直抖動后,才真正執行。 1.函數的節流 當持續觸發事件時,保證一定時間段內只調用一次事件處理函數。也就是一個函數執行一次后,只有大于設定的執行周期后才會執行第二次。記憶法:聯系到水流的流量,我想讓你1s只流出多少水你就只能...
閱讀 3650·2021-10-12 10:11
閱讀 1013·2021-09-22 15:42
閱讀 3465·2019-08-30 13:06
閱讀 907·2019-08-29 17:05
閱讀 1650·2019-08-29 12:21
閱讀 2378·2019-08-29 11:31
閱讀 1135·2019-08-23 18:37
閱讀 1257·2019-08-23 14:58