Js实现防抖节流
前言
防抖节流是经常在开发中用到的一个东西,都是用来控制某个函数在一定时间内触发次数,两者都是为了减少触发频率,以便提高性能或者说避免资源浪费。
防抖: n 秒后在执行该事件,若在 n 秒内被重复触发,则重新计时
节流: n 秒内只运行一次,若在 n 秒内重复触发,只有一次生效
手写防抖
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| <body> <button id="FangDou">防抖</button> </body> </html>
<script> var btn = document.querySelector('#FangDou') function debounce(func, delay){ let timer = null; return function(){ if(timer){ clearTimeout(timer) } timer = setTimeout(() => { func.apply(this, arguments); timer = null }, delay) } }
function play(){ console.log(11111) }
btn.onclick = debounce(this.play , 500)
</script>
|
手写节流
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
function throttle(func , delay){ let timer = null return function(){ if(timer){ return ; } timer = setTimeout(() => { func.apply(this , arguments) timer = null }, delay); } }
|