防抖:
????觸發(fā)高頻事件后n秒內(nèi)只執(zhí)行一次携悯,如果n秒內(nèi)再次觸發(fā)就會(huì)重新計(jì)算時(shí)間望侈。
? ?<button class="button" id="buton">按鈕</button>
..............................................................
? ? ?function showTop() {
? ? ? ? ? ? var scrollTop =
? ? ? ? ? ? ? ? document.body.scrollTop || document.documentElement.scrollTop;
? ? ? ? ? ? console.log('你停下了 ?我要計(jì)時(shí)嘍開(kāi)始打印了666666666666');
? ? ? ? }
? ? ? ? /* 防抖 */
? ? ? ? function debounce(fn, delay) {
? ? ? ? ? ? let timer = null; //借助閉包
? ? ? ? ? ? return function() {
? ? ? ? ? ? ? ? if (timer) {
? ? ? ? ? ? ? ? ? ? console.log('清除上一個(gè)舊的計(jì)時(shí)器');
? ? ? ? ? ? ? ? ? ? clearTimeout(timer);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? console.log('設(shè)置了新計(jì)時(shí)器');
? ? ? ? ? ? ? ? timer = setTimeout(fn, delay); // 簡(jiǎn)化寫(xiě)法
? ? ? ? ? ? };
? ? ? ? }
? ? ? ? var btn1 = document.getElementById('buton');
? ? ? ? btn1.addEventListener('click', debounce(showTop, 000));
防抖? 就是相當(dāng)于辫塌,某偶一個(gè)點(diǎn)擊事件顽照。宅粥。。第一次點(diǎn)擊以后吠冤,閉包中的變量timer? ?為空浑彰,,直接進(jìn)到計(jì)時(shí)器中拯辙,等待時(shí)間(比如等待5秒)郭变,并執(zhí)行即時(shí)任務(wù)颜价,而且生成了一個(gè)計(jì)時(shí)器的唯一標(biāo)識(shí),存在了timer中诉濒,如果在五秒之內(nèi)周伦,沒(méi)有再次觸發(fā)點(diǎn)擊事件,未荒,那就等待五秒后专挪,執(zhí)行定時(shí)器中打印函數(shù)就可以了,如果在五秒內(nèi)再去觸發(fā)一次點(diǎn)擊事件片排,進(jìn)到函數(shù)中以后寨腔,讀到了timer是有值的(上一個(gè)定時(shí)器生成存進(jìn)去的),所以進(jìn)到判斷中率寡,把第一個(gè)定時(shí)器的清除了迫卢,并且并且重新計(jì)算五秒,并且到五秒以后冶共,執(zhí)行定時(shí)器中的函數(shù)乾蛤,又生成了新的一個(gè)定時(shí)器的唯一標(biāo)識(shí),捅僵,如果在新的五秒之內(nèi)家卖,又在點(diǎn)擊了事件,又會(huì)重新進(jìn)到函數(shù)中命咐,讀取到第二次中新的定時(shí)器的唯一標(biāo)識(shí)篡九,并且清除了定時(shí)器,醋奠,榛臼,又生成第三個(gè)定時(shí)器的唯一標(biāo)識(shí),并重新計(jì)算五秒窜司,沛善,依次這樣子執(zhí)行,塞祈,直到最后一次點(diǎn)擊事件(后面五秒之內(nèi)沒(méi)有點(diǎn)擊事件了)金刁,讀取到上一次時(shí)器的唯一標(biāo)識(shí),并且清除了议薪,并且生成新的定時(shí)器唯一標(biāo)識(shí)尤蛮,重新等待五秒,準(zhǔn)備執(zhí)行計(jì)時(shí)器中的函數(shù)(也就是打印函數(shù))