js中防抖节流
防抖: 事件在n秒后执行,如果在n秒内被再次出发,会重新计算时间,直到n 秒后才执行。简单点就是一个事件,一个事件在n秒内被再次触发,事件不会执行,只有过了n秒才执行
- 防抖应用:scroll滚动事件的出发;
- 网络请求一些应用;
- 表单验证
- 按钮提交事件
- 浏览器窗口缩放
- 搜索框输入
还是看代码吧
Document
当鼠标在这个盒子移动会频繁出发这个事件,影响性能,
Document
2节流: 如果你持续触发事件,每隔一段时间,只执行一次事件。
Document
// 2、防抖功能函数,接受传参 function debounce(fn) { // 4、创建一个标记用来存放定时器的返回值 let timeout = null; return function() { // 5、每次当用户点击/输入的时候,把前一个定时器清除 clearTimeout(timeout); // 6、然后创建一个新的 setTimeout, // 这样就能保证点击按钮后的 interval 间隔内 // 如果用户还点击了的话,就不会执行 fn 函数 timeout = setTimeout(() => { fn.call(this, arguments); }, 1000); }; }
引用:https://juejin.im/post/5c87b54ce51d455f7943dddb#heading-3