react中 防抖与节流

防抖

防抖函数的原理:保证在连续触发事件的过程中,只执行最后一次操作

防抖和节流本质是不一样的。防抖是将多次执行变为最后一次执行,节流是将多次执行变成每隔一段时间执行

代码

const debounce = (func, delay = 50) => {
let timer = 0;
return function (...args) {
 if (timer) clearTimeout(timer);
 timer = setTimeout(() => {
   func.apply(this, args);
 }, delay);
};
};

使用场景:

  • 文本输入的验证,连续输入文字后发送 AJAX 请求进行验证,验证一次就好

  • 按钮提交场景:防止多次提交按钮,只执行最后提交的一次

  • 服务端验证场景:表单验证需要服务端配合,只执行一段连续的输入事件的最后一次,还有搜索联想词功能类似

节流

节流函数原理:确保在连续触发事件的过程中,某一时间段内只执行一次操作

代码

时间戳方法(一)

const throttle = (func, delay = 50) => {
let lastTime = 0;
return function (...args) {
 let now = +new Date();
 if (now - lastTime > delay) {
   lastTime = now;
   func.apply(this, args);
 }
};
};

定时器方法(二)

const throttle = (func, delay = 50) => {
let timer = 0;
return function (...args) {
 if (timer) return;
 timer = setTimeout(() => {
   func.apply(this, args);
   timer = 0;
 }, delay);
};
};

使用场景:

  • 拖拽场景:固定时间内只执行一次,防止超高频次触发位置变动。DOM 元素的拖拽功能实现(mousemove

  • 缩放场景:监控浏览器resize

  • 滚动场景:监听滚动scroll事件判断是否到页面底部自动加载更多

  • 动画场景:避免短时间内多次触发动画引起性能问题

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值