防抖节流工具型方法的封装

时间:2021-1-18 作者:admin

封装防抖工具型方法

/**
 * @description: 防抖函数的封装
 * @param {Function} callback : 要执行的代码
 * @param {String} time : 要倒计时的时间(停止后多久执行逻辑代码)
 * @return: 返回防抖函数
 */
function fandou (callback, time) {
  let timer = null  // 声明一个将要存放定时器的变量
  return function () {  // 返回一个函数
    clearTimeout(timer)    // 清空定时器
    timer = setTimeout(() => {    // 给变量赋予倒计时逻辑
      callback()      // 调用传进来的回调函数
    }, time)      // 等待执行逻辑代码的时间为传入的 time 参数
  }
}

封装节流工具型方法 1

/**
 * @description: 节流函数的封装
 * @param {Function} callback : 要执行的代码
 * @param {String} time : 要倒计时的时间(停止后多久执行逻辑代码)
 * @return: 返回节流函数
 */
function jieliu (callback, time) {
  let timer = null  // 声明一个将要存放定时器的变量
  let beginTime = Data.now()  // 获取开始时的时间戳
  return function () {  // 返回一个工具方法
    clearTimeout(timer)    // 清除定时器
    let space = Data.now() - beginTime    // 获取( 当前时间戳(触发事件时) - 开始时间戳 ) 
    if(space >= time){    // 判断是否 大于等于指定时间
	  callback()	  // 执行传入的逻辑代码
	  beginTime = Data.now()	  // 跟新开始时间
    } else {	// 触发事件间隔小于 传入的时间
	  timer = setTimeout(() => {	  // 设置定时器 进入倒计时
		callback()		// 执行传入的逻辑代码
	  }, tiem)	  // 等待时间为 传入的 time
    }
  }
}

封装节流工具型方法 2

/**
 * @description: 节流函数的封装
 * @param {Function} callback : 要执行的代码
 * @param {String} time : 要倒计时的时间(停止后多久执行逻辑代码)
 * @return: 返回节流函数
 */
function jieliu (callback, time) {
  let isPlay = false    // 声明一个 开关  (关闭的开关 -> 可以理解成要打游戏 现在false是还没有进入对局 此时可以开始新的游戏对局)
  return function () {  // 返回节流方法
	if(!isPlay) {	// 判断开关状态
	  isPlay = true	  // 改变开关状态 (true -> 此时已经开始游戏对局 就不能在开始新的游戏对局)
	  setTimeout(() => {	  // 定时器逻辑
		callback()	    // 执行 传入的逻辑代码
		idPlay = false		// 执行完毕 关闭开关 (对局结束 可以开启下一把)
	  }, time)		// 触发事件之后多久执行逻辑代码
    }
  }
}
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。