一個函數執行一次後,只有大於設定的執行週期纔會執行第二次.函數
function throttle(fn, delay) { // 記錄上一次函數觸發的時間 var lastTime = 0 return function () { // 記錄當前函數觸發時間 var nowTime = Date.now() if (nowTime - lastTime > delay) { fn() lastTime = nowTime } } }
document.onscroll = throttle(function () { console.log('事件觸發' + Date.now()) }, 200)
一個須要頻繁觸發的函數 在規定事件內 只讓最後一次生效 前面的不生效測試
function debounce(fn, delay) { // 記錄上一次延時器 var timer = null return function () { // 清除上一次的延時器 clearTimeout(timer) // 從新設置新的延時器 timer = setTimeout(() => { fn() }, delay) } }
<button id="btn"> 按鈕</button>
document.getElementById('btn').onclick = debounce(function () { console.log('點擊事件被觸發了') }, 1000)