亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

防抖&節流

標簽:
JavaScript

今天也有很努力的在赚猫粮钱

如若文章存在错误或不足,望理解并帮我指出,感激不尽


防抖

每次事件触发后总是等待一段时间执行,如果在等待时间内事件再次触发,则重新计算等待时间(停止触发的时候只会执行一次,最后一次生效)

未命名文件.png

根据上面的文字和图解,再来看防抖函数

function fun () {
	// 会多次触发的函数
}
复制代码
let timer = null;
function debounce (fun,wait) {
	// 事件触发,如果之前有等待的事件,则清空计时,重新进行事件等待执行
	if (timer) {
  	clearTimeOut(timer);
  }
  timer = setTimeout(fun, wait);
}
复制代码

接下来我们要需要把这个函数封装成为一个公共的方法放在我们的项目中,因为是把函数作为参数传入到防抖函数内,不确定传入的函数内都会使用什么参数,参数绑定的对象是哪个,为了能够准确的使用参数,所以我们在调用时修改this指向

let timer = null;
function debounce (fun,wait) {
	// 事件触发,如果之前有等待的事件,则清空计时,重新进行事件等待执行
	if (timer) {
  	clearTimeOut(timer);
  }
  timer = setTimeout(function () {
  	fun.apply(this);
  }, wait);
}

// 调用
debounce(fun, 100);
复制代码

我们会发现我们向防抖函数传递的参数fun无法传递参数进去,这样就需要进一步的修改了

let timer = null;
function debounce (fun,wait) {
  return function () {
  	const argu = arguments;
  	// 事件触发,如果之前有等待的事件,则清空计时,重新进行事件等待执行
    if (timer) {
      clearTimeOut(timer);
    }
    timer = setTimeout(function () {
      fun.apply(this, argu);
    }, wait);
  }
}

// 调用
debounce(fun, 100)(argu1, argu2);
复制代码

节流

每次事件触发后总是等待一段时间执行,如果在等待时间内事件再次触发(事件触发时有其他事件在等待),则不作处理。如果事件触发时没有其他事件在等待,则将事件进行绑定(等待时间到则进行事件执行)多次触发事件时只有一次生效,对应时间内只执行一次,第一次生效。

未命名文件.png

根据上面的文字和图解,再来看节流函数

let timer = null;
function throttle (fun,wait) {
	// 事件触发,如果之前有等待的事件,则不作处理
	if (timer) {
  } else {
  	事件触发,前面没有事件在等待,则将事件进行等待执行
  	timer = setTimeout(function () {
  		fun();
  	}, wait);
  }
}
复制代码

同上面的防抖函数一样,只是内部执行时机不同,我们将节流函数进行封装

let timer = null;
function throttle (fun,wait) {
  return function () {
  	const argu = arguments;
    // 事件触发,如果之前有等待的事件,则不作处理
    if (timer) {
    } else {
      事件触发,前面没有事件在等待,则将事件进行等待执行
      timer = setTimeout(function () {
        fun();
      }, wait);
    }
  }
}

// 调用
throttle(fun, 100)(argu1, argu2);

作者:努力赚钱的铲屎官
链接:https://juejin.cn/post/6959094874264043533
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消