我们都知道防抖是在最后一个人上车之后再进行计时(可以先看我写的什么是防抖函数),一段时间后没有人上车就发车,而节流则类是于准点发车的公交车,即一段时间后就发车,中途有人上车也不会像防抖一样进行重新计时。
常用的场景有:
窗口调整,页面滚动,抢购疯狂点击
例如:下面这个例子,我们每点击一次按钮,数字就会进行加一,我们点击多块,数字就会变多块,这有时不是我们想要的,比如点抢购物券,因为这样我们可以加一个恶意程序,进行多次点击,这时候就很浪费性能
<div id='oDiv'>0</div>
<button id='oBtn'>click</button>
<script>
var oDiv = document.getElementById('oDiv');
var oBtn = document.getElementById('oBtn');
oBtn.onclick = function() {
oDiv.innerText = parseInt(oDiv.innerText) + 1;
}
</script>
比如我,我们用一个for循环,循环重复执行点击事件
for( var i = 0; i < 1000; i ++) {
oDiv.onclick();
}
这时候,节流函数就可以解决这个问题,一段时间内只执行一次,哪怕这段时间内点击上千次,这段时间内也只执行一次。
节流函数:
function throttle (handler, wait) { //等待wait时间后执行一次handler函数
var lastTime = 0;
return function (e) {
var nowTime = new Date().getTime(); //获取当前的时间
if (nowTime - lastTime > wait) {
handler.apply(this, arguments);
lastTime = nowTime;
}
}
}