防抖和节流

防抖和节流都是前端为了控制用户的频繁交互,提供系统性能

防抖(debounce):

定义:当事件持续触发时候,一定时间内没有在触发,该事件只会执行一次,如果一定事件内,时间不断发生,防抖会结束之前的时间,重新开始新的事件,从而重新开始延时。

适用场景:搜索、滚动加载事件

代码:

html 复制代码
// 防抖函数
function debounce(func, wait) {
  let timeout;
  return function() {
    const context = this;
    const args = arguments;
    clearTimeout(timeout);
    timeout = setTimeout(function() {
      func.apply(context, args);
    }, wait);
  };
}



// 防抖示例
const debouncedSearch = debounce(function() {
  console.log('防抖搜索');
}, 500);
window.addEventListener('scroll', debouncedSearch);

节流:

定义:当事件持续触发时候,一定时间内没有在触发,该事件只会执行一次,如果一定时间内,事件不断发生,节流不会管新触发事件,只有等前面事件结束才会触发新的事件。

适用场景:滚动监听、窗口大小改变等

代码:

html 复制代码
// 节流函数
function throttle(func, wait) {
  let timeout;
  return function() {
    const context = this;
    const args = arguments;
    if(!timeout){
        timeout = setTimeout(function() {
          timeout = null;
          func.apply(context, args);
        }, wait);
    }
  };
}



// 防抖示例
const throttledScroll = throttle(function() {
  console.log('节流行为');
}, 500);
window.addEventListener('scroll', throttledScroll );
相关推荐
wefly201716 分钟前
jsontop.cn:一站式 JSON 全能工具集,开发全流程效率神器
前端·javascript·python·django·json·json在线转换
XDHCOM1 小时前
Redis远程连接命令详解,分享高效配置与安全实践技巧
前端·redis·安全
YAY_tyy3 小时前
Vue3 + Three.js 实战:自定义 3D 模型加载与交互全流程
前端·javascript·vue.js·threejs
星河耀银海3 小时前
3D效果:HTML5 WebGL结合AI实现智能3D场景渲染
前端·人工智能·深度学习·3d·html5·webgl
英俊潇洒美少年4 小时前
SSE 流式接口讲解
javascript
美狐美颜sdk8 小时前
从人脸关键点到动态贴图:面具特效在美颜SDK中的实现原理
前端·图像处理·人工智能·直播美颜sdk·美颜api
我命由我123458 小时前
React Router 6 - 编程式路由导航、useInRouterContext、useNavigationType
前端·javascript·react.js·前端框架·html·ecmascript·js
威联通网络存储9 小时前
告别掉帧与素材损毁:威联通 QuTS hero 如何重塑影视后期协同工作流
前端·网络·人工智能·python
anOnion9 小时前
构建无障碍组件之Tabs Pattern
前端·html·交互设计
一招定胜负10 小时前
课堂教学质量综合评分系统
java·linux·前端