配置节流函数

 debounce 函数 

  function debonce (method) {

 clearTimeout(method.timer)

 method.timer = setTimeout( function () {

  method ()

 }, 50)

}

debonce 函数保证函数执行频率最多 50ms执行一次 当时间间隔小于 50ms时 清除这个定时器 函数定时器重新计时 

 

throttle 函数保证当函数执行频率超过50ms一次时 只要之后的一次调用throttle函数 当函数调用时间间隙大于50ms 调用method函数

var oldTime = new Date().getTime()

function throttle (method) {

  var newTime = new Date().getTime() 

  if (newTime - oldTime >= 50 ) {

    newTime = new Date().getTime()

    method()

 }

}

 

 

 

 

 

/**
*配置节流函数
*@param {[function]} fn [要执行的函数]
*@param {[Number]} delay [延迟执行的毫秒数]
*@param {[Number]} mustRun [至少多久执行一次]
*@return {[function]} [节流函数]
*/
exports.throttle = (fn, wait, mustRun) => {
let timeout
let startTime = new Date()
return function () {
  let context = this
  let args = arguments
  let curTime = new Date()

  clearTimeout(timeout)

  if (curTime - startTime >= mustRun) {
  // 如果到达触发时间 触发handler
  fn.apply(context, args)
  startTime = curTime
 } else {
// 如果没到达触发 时间 重新设定定时器
  timeout = setTimeout(fn, wait)
  }
}
}

以上函数的作用是 最多delay(ms)内执行一次   mustRun(ms) 时间间隔内最少执行一次

posted @ 2017-11-17 21:46  summercyz  阅读(164)  评论(0编辑  收藏  举报