摘要:冴羽的博客学习节流
两种主流的方法实现节流:
1.使用时间戳
2.设置定时器
时间戳
原理:如果两次触发的时间戳差值大于设定的时间间隔就执行函数,否则,不执行;并且将初始值设为0,保证第一次触发时能够执行函数
1 | var container = document.getElementById('container'); |
可以看出:使用时间戳进行节流是触发事件时就立即进行判断现在是否执行回调函数
定时器
原理:触发事件时设定一个定时器,过一定时间后定时器生效,将 timeout 值清除并执行回调函数,当定时器存在时就不执行函数
1 | function throttle(callback, wait) { |
可以看出:使用定时器进行节流是触发事件后等待一段时间才会执行回调函数
加强版
希望能够在触发事件时立即执行一次函数,在停止触发事件后再执行一次函数,每次执行函数的间隔是一定的,而且还可以取消执行
1 | function throttle(callback, wait) { |
定制版
想要可以控制触发时是否立即执行函数和停止触发后是否再执行一次函数
可以通过第三个参数options对象传递配置项来进行判断:
leading:false 表示禁用第一次执行
trailing: false 表示禁用停止触发的回调
1 | function throttle(callback, wait, options) { |
注意:两者不能同时为false。因为都为false时,最后一次执行函数后previous并没有清零,当过了设定的时间再触发就会使remaining小于0,回调函数立刻执行