js 防抖节流

防抖和节流都是为避免频繁触发,优化性能的方法。
以下方法都用到了闭包(内部函数能够访问到外部函数定义的变量)
不同的是,
防抖是将连续触发变为最后一次触发执行,例如搜索框实时搜索,提交数据的按钮等

//普通版本
function debounce(fn, wait){
  var timeout = null
  return function(){
  	if(timeout){
  		clearTimeout(timeout)
  	}
  	timeout = setTimeout(fn,wait)
}
// 
var delay = debounce(submitFn,1000) //使用时用

// 进阶版 执行方法可以传参(使用apply改变this并接收参数)
const debounce = (fn:any,wait=1000)=>{
  let timeout = null;
  return function(...args){
    const self = this;
    if(timeout){
      clearTimeout(timeout);
    }
    timeout = setTimeout(()=>{
      fn.apply(self, args)
    }, wait);
  }
}

var delay = debounce(submitFn,1000)//此时使用delay时传参就能为submitFn方法传参,
//用法为 
const content = document.getElementById('content');
content.onclick = delay(123);
function submitFn(count) {
  console.log(count)
 };

节流是将连续触发变为隔一段时间执行,例如监听滚动条,鼠标移动等连续触发的事件

function throttle(fn, wait){
  let timer = null;
  return function(...args){
  	const self = this;
  	if(!timer){
  		setTimeout(()=>{
  		fn.apply(self,args);
  		timer = null;
  		},wait);
  	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值