摘要:函數(shù)的節(jié)流當(dāng)持續(xù)觸發(fā)事件時(shí),保證一定時(shí)間段內(nèi)只調(diào)用一次事件處理函數(shù)。也就是一個(gè)函數(shù)執(zhí)行一次后,只有大于設(shè)定的執(zhí)行周期后才會(huì)執(zhí)行第二次。記憶法讓函數(shù)執(zhí)行者冷靜下來(lái)后不一直抖動(dòng)后,才真正執(zhí)行。
1.函數(shù)的節(jié)流
當(dāng)持續(xù)觸發(fā)事件時(shí),保證一定時(shí)間段內(nèi)只調(diào)用一次事件處理函數(shù)。也就是一個(gè)函數(shù)執(zhí)行一次后,只有大于設(shè)定的執(zhí)行周期后才會(huì)執(zhí)行第二次。
記憶法:聯(lián)系到水流的流量,我想讓你1s只流出多少水你就只能流多少水,多的水流只能等到下個(gè)周期才能流出。
應(yīng)用場(chǎng)景:如用戶不斷滑動(dòng)滾輪,規(guī)定1s只能真正下滑一次,你滑再多也沒(méi)用,只能等到下個(gè)周期你再滑才有用。
實(shí)現(xiàn)原理:
A:用函數(shù)的閉包來(lái)鎖住上一執(zhí)行的時(shí)間,在用這一次執(zhí)行的時(shí)間相比,大于設(shè)定的間隔時(shí)間則執(zhí)行
B:也可以直接把lasTime放到全局去,不用閉包但這樣就不好在事件監(jiān)聽(tīng)的時(shí)候傳遞參數(shù)delay只能寫(xiě)死
這里我節(jié)流用閉包寫(xiě),防抖就不用閉包了
用閉包就有一個(gè)問(wèn)題,this的指向會(huì)非常復(fù)雜:
1.throttle函數(shù)的執(zhí)行環(huán)境具有全局性,內(nèi)部this通常是指向window的,然后返回一個(gè)匿名函數(shù)。
2.返回的匿名函數(shù)綁定了事件,this指向監(jiān)聽(tīng)的元素(document)
3.fn其實(shí)與上面返回匿名函數(shù)形成了閉包,且fn也其實(shí)是一個(gè)匿名函數(shù),匿名函數(shù)的執(zhí)行具有全局性,fn內(nèi)部this應(yīng)該指向window
4這里用apply修正this指向,使fn內(nèi)部的this重新指向document
當(dāng)持續(xù)觸發(fā)事件時(shí),一定時(shí)間段內(nèi)沒(méi)有再觸發(fā)事件,事件處理函數(shù)才會(huì)執(zhí)行一次,如果設(shè)定的時(shí)間到來(lái)之前,又一次觸發(fā)了事件,就重新開(kāi)始延時(shí),比如頻繁觸發(fā)的某一函數(shù),防抖可以只讓最后一次執(zhí)行。記憶法:讓函數(shù)執(zhí)行者冷靜下來(lái)后(不一直抖動(dòng)后),才真正執(zhí)行。
應(yīng)用場(chǎng)景:用戶多次點(diǎn)擊提交表單
不用閉包后結(jié)構(gòu)會(huì)很簡(jiǎn)單
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/117450.html
摘要:節(jié)流在指定時(shí)間之內(nèi),讓函數(shù)只觸發(fā)一次。防抖對(duì)于一定時(shí)間段的連續(xù)的函數(shù)調(diào)用,只讓其執(zhí)行一次??偨Y(jié)以上只是很簡(jiǎn)單的寫(xiě)了一下節(jié)流和防抖的原理,在里,實(shí)現(xiàn)起來(lái)更加復(fù)雜,但是背后的原理核心就是上邊代碼寫(xiě)的。 概述 在平時(shí)的開(kāi)發(fā)中,經(jīng)常會(huì)聽(tīng)到兩個(gè)差不多很相近的詞。節(jié)流(throttle)和防抖(debounce)。這是兩個(gè)類(lèi)似又有些不同的優(yōu)化方案。 節(jié)流:在指定時(shí)間之內(nèi),讓函數(shù)只觸發(fā)一次。 防...
摘要:文件為函數(shù)要傳入的參數(shù)返回事件處理函數(shù)添加事件監(jiān)聽(tīng)節(jié)流函數(shù)一般用于事件的情況較多,因?yàn)檫@些事件的觸發(fā)是連續(xù)性的,需要在一個(gè)時(shí)間間隔內(nèi)只觸發(fā)一次。 showImg(https://segmentfault.com/img/remote/1460000018998747); 閱讀原文 前言 在前端開(kāi)發(fā)當(dāng)中我們經(jīng)常會(huì)綁定一些事件觸發(fā)的某些程序執(zhí)行,有時(shí)這些事件會(huì)連續(xù)觸發(fā),如瀏覽器窗口 s...
摘要:函數(shù)的節(jié)流當(dāng)持續(xù)觸發(fā)事件時(shí),保證一定時(shí)間段內(nèi)只調(diào)用一次事件處理函數(shù)。也就是一個(gè)函數(shù)執(zhí)行一次后,只有大于設(shè)定的執(zhí)行周期后才會(huì)執(zhí)行第二次。記憶法讓函數(shù)執(zhí)行者冷靜下來(lái)后不一直抖動(dòng)后,才真正執(zhí)行。 1.函數(shù)的節(jié)流 當(dāng)持續(xù)觸發(fā)事件時(shí),保證一定時(shí)間段內(nèi)只調(diào)用一次事件處理函數(shù)。也就是一個(gè)函數(shù)執(zhí)行一次后,只有大于設(shè)定的執(zhí)行周期后才會(huì)執(zhí)行第二次。記憶法:聯(lián)系到水流的流量,我想讓你1s只流出多少水你就只能...
摘要:函數(shù)的節(jié)流當(dāng)持續(xù)觸發(fā)事件時(shí),保證一定時(shí)間段內(nèi)只調(diào)用一次事件處理函數(shù)。也就是一個(gè)函數(shù)執(zhí)行一次后,只有大于設(shè)定的執(zhí)行周期后才會(huì)執(zhí)行第二次。記憶法讓函數(shù)執(zhí)行者冷靜下來(lái)后不一直抖動(dòng)后,才真正執(zhí)行。 1.函數(shù)的節(jié)流 當(dāng)持續(xù)觸發(fā)事件時(shí),保證一定時(shí)間段內(nèi)只調(diào)用一次事件處理函數(shù)。也就是一個(gè)函數(shù)執(zhí)行一次后,只有大于設(shè)定的執(zhí)行周期后才會(huì)執(zhí)行第二次。記憶法:聯(lián)系到水流的流量,我想讓你1s只流出多少水你就只能...
閱讀 1446·2021-10-11 10:57
閱讀 2263·2021-09-02 15:15
閱讀 1769·2019-08-30 15:56
閱讀 1316·2019-08-30 15:55
閱讀 1242·2019-08-30 15:44
閱讀 1068·2019-08-29 12:20
閱讀 1438·2019-08-29 11:12
閱讀 1148·2019-08-28 18:29