防抖(debounce)是指:事件不断触发,只响应最后一次。实际的应用场景是:滚动、鼠标频繁点击、窗口大小连续变化、输入等事件会频繁触发响应函数,但我们不需要这么频繁的响应。我们认为在这波高频事件结束后再次回应就足够了。因此,防抖的具体过程是:在事件触发后设置“静音”定时器,并清除之前的定时器。经过一段时间的“静默”(不要太长),计时器到期并执行操作。本文时间线图可以帮助你理解:js防抖和节流先不考虑封装功能。scoll的防抖应该是这样的:');clearTimeout(timer);timer=setTimeout(function(){console.log('scrolledDEBOUNCE');},1000);});});向页面添加大文本或
可以看到滚动防抖的效果。(如果你的浏览器不支持监控文档scoll,换成window或者document.body试试)代码中输出“scrolling”的那一行被注释掉了。如果没有评论,则持续输出“滚动”;相比之下,防抖输出“scrolledDEBOUNCE”只会在滚动停止后1000ms输出一次。接下来是包装函数。一开始我想到的包是这样的:,function(){clearTimeout(timer);timer=setTimeout(function(){handler();},wait);});}debounce(document,'scroll',1000,function(){console.log('你在1000毫秒前停止了滚动');});});表单太低了。看了别人的封装形式,把响应动作封装起来就好了。参数是要做什么动作,延迟多久再做,尽量不要改变听力语句的原始形式。更改为此:handler();},delay);}}document.addEventListener('scroll',debounce(function(){console.log('你在1000毫秒前停止滚动');},500));});完成。防抖我觉得还是比较容易理解的。下一篇文章会多谈一点节流。
