防抖:
概念:用户连续点击,前面的触发都被取消,只有最后一次触发的回调在规定时间后才会触发。
即:如果连续触发 只会执行最后一次触发的回调。
使用场景:
百度搜索框中输入对应内容下方会有相关内容的提示,如果每输入一个文字都发送一次请求是非常浪费性能的,所以使用节流设置一个时间,只有当用户输入完内容之后不在输入,经过了预先设置好的时间才会发起请求。
// 防抖
// 概念:用户连续点击,前面的触发都被取消,只有最后一次触发的回调在规定时间后才会触发。
// 即 如果连续触发 只会执行最后一次触发的回调
// 绑定点击事件后,还要传入一个回调函数,所以通过返回一个函数,让绑定的事件去触发这个返回的函数
var btn = document.getElementById('input');
btn.addEventListener('click', debounce(submit));
function submit() {
console.log(1);
}
function debounce(fn) {
var t = null;
return function () {
if (t) {
clearTimeout(t); // 如果连续触发,则每次都会清除上一个定时器并重新开启一个定时器
}
t = setTimeout(function () {
fn(e)
}, 1000)
}
}
节流:
概念:在规定的时间间隔内不会重复触发回调,只有大于这个时间间隔才会触发回调,降低触发频率。
// 节流
// 概念:在规定的时间间隔内不会重复触发回调,只有大于这个时间间隔才会触发回调,降低触发频率
var btn2 = document.getElementById('input2');
btn2.addEventListener('click', throttle(sub, 2000));
function sub() {
console.log(1);
}
function throttle(fn, delay) {
var begin = 0;
return function () {
var cur = new Date().getTime();
console.log(cur - begin);
if (cur - begin > delay) {
fn();
begin = cur;
}
}
}