손떨림 방지 및 조절 기능의 사용을 쉽게 이해

hzc
풀어 주다: 2020-06-17 09:30:06
앞으로
1830명이 탐색했습니다.

머리말

기능 안정화 및 조절, 이런 지식 포인트는 면접에서 물어볼 확률이 더 높습니다.

Anti-shake

즉시 실행되지 않는 Anti-shake 버전은 n번 이후에 한 번 기능을 실행하는 것으로 이해될 수 있습니다. 흔들림 방지의 즉시 실행 버전은 기능을 즉시 실행하는 것입니다.

손떨림 방지 구현

/**
 * @desc 函数防抖
 * @param {Function} func 函数
 * @param {Number} wait 延迟执行毫秒数
 * @param {Boolean} immediate true 表示立即执行,false 表示非立即执行
 */
function debounce(func, wait, immediate) {
  let timeout
  return function () {
    let context = this
    let args = arguments
    if (timeout) {
      clearTimeout(timeout)
    }
    if (immediate) {
      let callNow = !timeout
      timeout = setTimeout(() => {
        timeout = null
      }, wait)
      if (callNow) {
        typeof func === 'function' && func.apply(context, args)
      }
    } else {
      timeout = setTimeout(() => {
        typeof func === 'function' && func.apply(context, args)
      }, wait)
    }
  }
}
로그인 후 복사

Throttling

Throttling은 n번마다 기능을 실행하는 것으로 이해될 수 있습니다.

조절 구현

/**
 * @desc 函数节流
 * @param {Function} func 函数
 * @param {Number} wait 延迟执行毫秒数
 * @param {Boolean} type true 表示时间戳版,false 表示定时器版
 */
function throttle(func, wait, type) {
  let previous
  let timeout
  if (type) {
    previous = 0
  } else {
    timeout
  }
  return function () {
    let context = this
    let args = arguments
    if (type) {
      let now = Date.now()
      if (now - previous > wait) {
        typeof func === 'function' && func.apply(context, args)
        previous = now
      }
    } else {
      if (!timeout) {
        timeout = setTimeout(() => {
          timeout = null
          typeof func === 'function' && func.apply(context, args)
        }, wait)
      }
    }
  }
}
로그인 후 복사

손떨림 방지와 조절의 차이

텍스트 상자를 사용하여 텍스트를 입력하여 시연합니다. 시간이 1초로 설정된 경우 사용자는 계속해서 텍스트를 입력하고, 손떨림 방지가 그렇지 않은 경우 즉시 실행하면 1초 동안 입력이 정지됩니다. 기능 실행 후 1회만 실행됩니다. 손떨림 방지 기능이 즉시 실행되면 해당 기능은 즉시 실행되어 1회만 실행됩니다. 조절은 사용자 입력 중에 매초마다, 가능하면 여러 번 기능을 실행하는 것을 의미합니다.

손떨림 방지 호출과 조절 호출의 차이점

다음 코드의 손떨림 방지 기능과 조절 기능은 10000000번 호출되는데 손떨림 방지 기능은 한 번만 실행되지만 조절 기능은 실행됩니다. 여러 번.

let debounceCallback = debounce(function () {
  console.log('debounceCallback')
}, 1000, false)

for (let i = 0; i < 10000000; i++) {
  debounceCallback()
}

let throttleCallback = throttle(function () {
  console.log('throttleCallback')
}, 1000, false)

for (let i = 0; i < 10000000; i++) {
  throttleCallback()
}
로그인 후 복사

추천 튜토리얼: "JS Tutorial"

위 내용은 손떨림 방지 및 조절 기능의 사용을 쉽게 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:juejin.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿