防抖和节流

防抖和节流

提高代码的执行效率,降低浏览器和服务器的负担

1、防抖

单位时间内,频繁的触发一个事件,只执行最后一次

例如:模糊搜索时,用户输入连续字段后等待一秒后再发起请求,而不是用户输入一个单词就请求一次

就像电梯一样,开门后无人进出几秒后才会关门,期间有人上下,又会重新计算时间,等待几秒后关门

示例代码:

`原理`:在2s内如果用户有输入内容,就不执行定时器函数,不发送请求。2s内用户没有输入内容,就执行定时器,发起请求

// 1、先定义一个空的定时器
let timer = null;

// 2、监听用户的输入事件
input.addEventListener('input', () => {
    // 3、一开始先清空定时器
    clearTimeout(timer);
    // 4、开启新的定时器,2秒后根据输入内容发起请求
    timer = setTimeout(() => {
        console.log('用' + input.value + '发起请求')
    }, 2000)
})

2、节流

单位时间内,频繁的触发一个事件,只执行一次

例如:轮播图的左右切换按钮,一直点不会频繁的切换,而是固定时间内只执行一次

就像游戏内技能cd一样,点一次之后,再怎么点也不会触发技能,只有等cd过了才会执行

示例代码:

`原理`:记录下上一次执行事件的时间,再获取当前事件触发的时间,时间差如果超过了一定事件,才会执行事件,否则不会执行

// 1、先记录上一次执行时间,初始值为null
let preTime = null;

// 2、绑定事件
dom.addEventListener('click', () => {
    // 3、获取当前触发事件的时间
    let currentTime = +new Date();
    // 判断当前事件 - 上一次的时间 是否超过了1s,超过则执行功能代码,并将这一次的当前时间赋值给上一次执行时间
    if(currentTime - preTime > 1000){
        console.log('可以执行对应功能');
        // 4、记录下当前执行时间
        preTime = currentTime
    }
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值