// 1、防抖 :规定一个期限时间,在首次触发事件时,不利己执行回调函数,而是在期限时间后在执行,如果期限时间内回调函数被重发调用,则期限时间重新计算,并且上一次回调函数不在执行
// 例如:搜索框频繁输入搜索
function search(fn, num) {
var timeId = null
return function () {
if (timeId) {
clearTimeout(timeId)
}
timeId = setTimeout(fn, num);
}
}
function fn() {
console.log("一秒后停止输入了");
}
document.getElementById("text_id").addEventListener("input", search(fn, 1000))
// 2、节流 : 规定一个期限时间,在该时间内,触发事件的回调函数只执行一次,如果期限时间内的回调函数被对此触发,则只有一次能生效
// 实际上节流就是让函数执行后,在某个时间段内暂时失效,过了这个时间段后在重新激活
// 类似于游戏CD冷却
function Throttling (fn1,num1){
var timeId = null
var old_time
return function (){
var new_time = new Date().getTime()
if(old_time&&new_time < num1+old_time){
clearTimeout(timeId)
timeId = setTimeout(function(){
fn1()
old_time = new_time
},num1)
}else{
fn1()
old_time = new_time
}
}
}
function fn1(){
var position = document.body.scrollTop||document.documentElement.scrollTop
console.log('当前位置:',position);
}
window.onscroll= Throttling(fn1,3000)