防抖
原理
事件响应函数在一段时间后才执行,如果这段时间内再次调用,则重新计算执行时间。也就是说,在这个时间内,无论你怎么触发事件,我都不会执行,只有这段时间无操作后才会执行。
应用场景
-
scroll事件的滚动触发
-
搜索框输入查询(keyup事件)
-
表单验证
-
按钮提交事件
-
浏览器窗口缩放(resize事件)
实现&取消防抖
function debounce(func, wait, immediate) {
let timeout, result;
// 检查func是否为函数
if (typeof func !== 'function') {
throw new TypeError('Expected a function');
}
// wait如果忘记设置,,默认为0
wait = wait || 0;
var debounced = function () {
// console.log(this); //=>从中可以测试出this指向的container
//保存this
let _this = this;
// 解决前面的event指向问题
let args = arguments;
// 清空上从定时器
if (timeout) clearTimeout(timeout);
if (immediate) {
let callNow = !timeout;
timeout =