js实现防抖和节流

一,防抖

防抖是指触发事件后在n秒内函数只能执行一次,如果在n秒内又触发了同一个事件,则重新计算函数执行时间。
防抖的原理就是: 要等你触发完事件 n 秒内不再触发事件,我才执行。

优点: 防止同一时间多次下发接口,出现卡顿假死现象,有效减少了性能的损耗

防抖应用最多的就是 实时搜索

在<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
  <div id="demo">
      <input id="inp" type="text" value="">
  </div>

  <script>
      function success() {
          var val = document.getElementById("inp").value;
          console.log("搜索框中的值为" + val);
      }

      //防抖函数
      const debounce = (fn, delay) => {
          let timer = null;
          return (...args) => {
              clearTimeout(timer)
              timer = setTimeout(() => {
                  //绑定this,arguments的作用域,防止被外界修改,是fn的this就是fn的this
                  fn.apply(this,args)
              },delay)
          }
      }

      var app = document.getElementById("inp");
      app.addEventListener('input', debounce(success, 1000));
  </script>
</body>
</html>

假如我要在搜索框对 123 进行过滤
没防抖的效果:
在这里插入图片描述
加入防抖函数以后:
在这里插入图片描述

二、节流

当持续触发事件时,保证在一定时间内只调用一次事件处理函数,意思就是说,假设一个用户一直触发这个函数,且每次触发小于既定值,函数节流会每隔这个时间调用一次

function throttle(fn, delay){
	//记录上一次函数触发时间
	var lastTime = 0;
	return function(){
		//记录当前函数触发的时间
		var nowTime = Date.now();
		if(nowTime-lastTime > delay){
			//修正this的指向
			fn.call(this);
			lastTime = nowTime;
		}
	}
}

app.addEventListener('input', throttle(success, 1000));

防抖和节流的区别: 防抖是将多次执行变为最后一次执行,节流是将多次执行变为每隔一段时间执行

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值