防抖和节流防抖:定义:当用户操作页面时,只有距离最近一次触发事件的时间超过设置的时间间隔时,才会执行回调函数。(事件在设定的时间间隔内重复触发多次,回调函数只会在设定的时间间隔后执行一次)应用场景:1、输入内容时。简化代码://debouncefunctiondebounce(fn,delay=500){lettimer=null//timer是闭包中的返回函数(){if(timer)clearTimeout(timer)timer=setTimeout(()=>{fn.apply(this,arguments)timer=null},delay)}}Throttling:定义:当用户操作页面时,在事件持续触发的时间段内,每隔设定的时间间隔执行一次回调函数。应用场景:1.滚动条被拉动时。2.滑动验证码滑块时。3.拖动元素时。短版代码://throttlefunctionthrottle(fn,delay=100){lettimer=nullreturnfunction(){if(timer)returntimer=setTimeout(()=>{fn.apply(this,arguments)timer=null},delay)}}2023年2月3日添加:今天有个需求,让我感悟了一些,不知道对不对,先记录下来,以后再修改。有一个需求是div中信息的更新通过更新周期函数触发其他函数调用。默认情况下,当信息更新时,它会自动滚动到底部。单击信息或滑动鼠标滚轮取消滚动到底部。有一个按钮可以点击恢复自动滚动到底部,也可以将鼠标滑到底部恢复。
