js 防抖实现

180 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

防抖

防抖策略(debounce)是当事件被触发后,延迟 n 秒后再执行回调,如果在这 n 秒内事件又被触发,则重新计时。 进行重复操作时,设置时间间隔,以最后一次满足间隔的操作为准进行执行。简单来说:就是以满足间隔的最后一次为准执行事件

应用场景 :用户在输入框中连续输入一串字符时,可以通过防抖策略,只在输入完后,才执行查询的请求,这样可以有效减少请求次数,节约请求资源。设置防抖操作可以减少页面中不必要的请求次数。

防抖:setTimeout + clearTimeout

// 设置防抖功能
var timer = null; // 用来保存进行防抖操作的定时器id

// 设置事件
$('#ipt').on('keyup', function () {
    // 如果再次输入,将上次的定时器清除即可
    clearTimeout(timer);

    // 通过定时器控制
    timer = setTimeout(function () {
        getData(val);
    }, 100);
});

// 封装函数,用来进行数据请求
function getData(val) {
    $.ajax({
        url: 'https://suggest.taobao.com/sug',
        data: { q: val },// 淘宝的这个接口指定了请求参数名为q,代表要查询的内容
        dataType: 'jsonp', // 使用jsonp方式发送请求
        success: function (res) {
            // 3 检测数据并创建结构(封装为函数,在多个地方使用)
            renderList(res);
        }
    });
}