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

在前端開發(fā)的過程中纪他,我們經(jīng)常會需要綁定一些持續(xù)觸發(fā)的事件,如resize晾匠、scroll止喷、mousemove等等,但有些時候我們并不希望在事件持續(xù)觸發(fā)的過程中那么頻繁地去執(zhí)行函數(shù)混聊。

var son=document.getElementById("son")
son.onmousedown = debounce (count, wait)

無論防抖還是節(jié)流弹谁,都要知道debounce是返回一個function乾巧,所以每次點擊執(zhí)行的是return里面的函數(shù)。所以timeout不會被重新聲明预愤。
因此執(zhí)行到里面的function沟于,調(diào)用時寫debounce()()

1.防抖

  • 思路:
    每次觸發(fā)事件時都取消之前的延時調(diào)用方法。
    (1)立即執(zhí)行版本
    設(shè)定時間過了以后植康,timeout=null旷太,callNow不為空,就可以執(zhí)行新的操作了销睁。如果還在設(shè)定時間之內(nèi)供璧,不會觸發(fā)處理函數(shù)。幾秒之后冻记,這個timeout=null睡毒,可以重新觸發(fā)處理函數(shù)了
function debounce2 (func, wait){   //防抖函數(shù)(立即執(zhí)行)
        let timeout;
        return function(){
            if(timeout) {
                console.log("清理定時器")
                clearTimeout(timeout)
            }
            let callNow =!timeout
            timeout =setTimeout(()=>{
                timeout=null
            },wait)
            if(callNow) {
                func.apply(this)
            }
        }
    }

(2)非立即執(zhí)行版本
觸發(fā)高頻事件后n秒內(nèi)函數(shù)只會執(zhí)行一次,如果n秒內(nèi)高頻事件再次被觸發(fā)冗栗,則清掉原來的計時器演顾,之前的計時器還沒執(zhí)行就被刪掉,永遠不會執(zhí)行了

function debounce (func, wait){  //防抖函數(shù)(非立即執(zhí)行)隅居,一段時間內(nèi)多次操作化為一次钠至,
        let timeout;
        return function(){
            let context = this;
            if(timeout) {
                clearTimeout(timeout)
            }
            timeout=setTimeout(()=>{
                func.apply(this)
            },wait)
        }
    }

防抖技術(shù)僅靠傳入延遲時間值的大小控制高頻事件的觸發(fā)頻率,如果傳入的延遲時間值比較大胎源,那么就會出現(xiàn)一定的問題棉钧。例如當傳入延遲時間為1000ms,那么當用戶滾動速度大于1000ms/次時涕蚤,則無論鼠標滾動多久都不會觸發(fā)事件處理函數(shù)掰盘。因此防抖技術(shù)存在一定的缺陷,會不適用于某些場景赞季,例如圖片懶加載愧捕。這個時候節(jié)流就派上用場了。

2.節(jié)流

高頻事件觸發(fā)申钩,但在n秒內(nèi)只會執(zhí)行一次次绘,所以節(jié)流會稀釋函數(shù)的執(zhí)行頻率

  • 思路:
    每次觸發(fā)事件時都判斷當前是否有等待執(zhí)行的延時函數(shù)
    (1)時間戳版本
function throttle(func, wait) {
    let previous = 0;
    return function() {
        let now = Date.now();
        let context = this;
        let args = arguments;
        if (now - previous > wait) {
            func.apply(context, args);
            previous = now;
        }
    }
}

函數(shù)會立即執(zhí)行
(2)定時器版本

function throttle(func, wait) {
    let timeout;
    return function() {
        let context = this;
        let args = arguments;
        if (!timeout) {
            timeout = setTimeout(() => {
                timeout = null;
                func.apply(context, args)
            }, wait)
        }

    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市撒遣,隨后出現(xiàn)的幾起案子邮偎,更是在濱河造成了極大的恐慌,老刑警劉巖义黎,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件禾进,死亡現(xiàn)場離奇詭異,居然都是意外死亡廉涕,警方通過查閱死者的電腦和手機泻云,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門艇拍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人宠纯,你說我怎么就攤上這事卸夕。” “怎么了婆瓜?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵快集,是天一觀的道長。 經(jīng)常有香客問我廉白,道長个初,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任猴蹂,我火速辦了婚禮院溺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘晕讲。我一直安慰自己,他們只是感情好马澈,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布瓢省。 她就那樣靜靜地躺著,像睡著了一般痊班。 火紅的嫁衣襯著肌膚如雪勤婚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天涤伐,我揣著相機與錄音馒胆,去河邊找鬼。 笑死凝果,一個胖子當著我的面吹牛祝迂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播器净,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼型雳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了山害?” 一聲冷哼從身側(cè)響起纠俭,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎浪慌,沒想到半個月后冤荆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡权纤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年钓简,在試婚紗的時候發(fā)現(xiàn)自己被綠了乌妒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡涌庭,死狀恐怖芥被,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坐榆,我是刑警寧澤拴魄,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站席镀,受9級特大地震影響匹中,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜豪诲,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一顶捷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧屎篱,春花似錦服赎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至秦士,卻和暖如春缺厉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背隧土。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工提针, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人曹傀。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓辐脖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親皆愉。 傳聞我的和親對象是個殘疾皇子揖曾,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容