背景:在監聽瀏覽器滾動條的scroll事件時該事件會觸發不少次,這樣當快速滾動時會有不好的性能,因此要限制事件觸發的頻率,能夠防抖和節流,這裏我記錄簡單的節流方法html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>事件節流</title> <style> .wrap { height: 10000px; } </style> </head> <body> <div class="wrap"></div> <script> var throttle = function (delay,interval, fn) { var startTime = new Date().getTime(); var timer=null; return function () { var curTime = new Date().getTime(); clearTimeout(timer); console.log(curTime - startTime, interval) if (curTime - startTime >= interval) { fn.apply(this, arguments) startTime = curTime } else{ timer=setTimeout(fn,delay) } } } window.onscroll = throttle(500,2000, function () { console.log('我是水滴') }) </script> </body> </html>
上面判斷若是此時距離上次觸發達到了某個時間就馬上觸發,不然就延遲多少毫秒再觸發,這樣當持續滾動時代碼會在每次滾動結束後一段時間內觸發一次,同時也會在時間間隔超過一段時間內執行一次。瀏覽器