防抖

目的:对于短时间内连续触发的事件,让某个时间期限内,事件处理函数只执行一次。
思路:在第一次触发事件时,不立即执行函数,给出一个期限值,在期限值内没有触发事件,则执行函数;如果在期限值内触发了事件,则重新计时。
实现:使用setTimeout 函数

  1. /*
  2. * 借助闭包
  3. * func 执行的函数
  4. * delay 期限值
  5. */
  6. function debounce(func,delay){
  7. let timer = null
  8. return function() {
  9. if(timer){
  10. clearTimeout(timer)
  11. }
  12. timer = setTimeout(func,delay)
  13. }
  14. }

节流

目的:如果短时间内大量触发同一事件,那么在函数执行一次之后,该函数在指定的时间期限内不再工作,直至过了这段时间才重新生效。
思路:触发函数事件后,立即执行函数,然后在某个时间段内暂时不执行函数,过了这段时间后再重新激活。
实现:使用setTimeout 函数

  1. function throttle(func,delay){
  2. let timer = null
  3. return function() {
  4. if(timer){
  5. return false
  6. }
  7. timer = setTimeout(() => {
  8. func()
  9. }, delay)
  10. }
  11. }