js防抖和节流

文章介绍了JavaScript中防抖(debounce)和节流(throttle)两种优化技术,用于处理频繁触发的事件。防抖确保在单位时间内只执行最后一次操作,如搜索框的搜索请求。节流则是保证在一定间隔内只执行一次,类似于游戏中的技能冷却。文章提供了lodash库的使用示例,并手写了防抖函数的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、防抖

防抖:单位时间内,频繁触发事件,只执行最后一次
举个栗子:王者荣耀回城,只要被打断就需要重新来

使用场景:
搜索框搜索输入。只需用户最后一次输入完,再发送请求
手机号、邮箱验证输入检测

<div>
    <p></p>
</div>
<div>
    <p class="p2"></p>
</div>
<script src="js/lodash.min.js"></script>
<script>
    // 利用lodash 实现防抖 500毫米后+1
    const div = document.querySelector('div');
    const p = document.querySelector('p');
    let i = 0;
    function mouseMove() {
        i++;
        p.innerHTML = i;
    }
    div.addEventListener('mousemove', _.debounce(mouseMove, 500))
</script>

在这里插入图片描述
手写防抖
防抖的核心就是利用定时器(setTimeout)来实现
0:声明一个定时器变量
2: 当鼠标每次滑动都先判断是否有定时器了,如果有定时器先清除以前的定时器
3:如果没有定时器则开启定时器,记得存到变量里面
4:在定时器里面调用要执行的函数

const div1 = document.querySelector('div:nth-child(2)');
const p1 = document.querySelector('.p2');
let i1 = 0;
function mouseMove1() {
    i1++;
    p1.innerHTML = i1;
}

function debounce(fn, t) {
    let timer;
    // return一个匿名函数
    return function () {
        if (timer) {
            clearTimeout(timer);
        }
        timer = setTimeout(function () {
            fn();
        }, t)
    }
}
div1.addEventListener('mousemove', debounce(mouseMove1, 500))

2、节流

节流:单位时间内,频繁触发事件,只执行一次
举个栗子:
王者荣耀技能冷却,期间无法续释放技能
和平精英98k 换子弹期间不能射击

<div>
<p></p>
</div>
<div>
<p class="p2"></p>
</div>
<script src="js/lodash.min.js"></script>
<script>
// 利用lodash 实现防抖 500毫米后+1
const div = document.querySelector('div');
const p = document.querySelector('p');
let i = 0;
function mouseMove() {
    i++;
    p.innerHTML = i;
}
div.addEventListener('click', _.throttle(mouseMove, 1000))


const div1 = document.querySelector('div:nth-child(2)');
const p1 = document.querySelector('.p2');
let i1 = 0;
div1.addEventListener('click', function () {
    i1++;
    p1.innerHTML = i1;
})

在这里插入图片描述
节流是,你一直触发你的,但是我不管,我自己隔一段时间就执行一次
防抖是你一直触发,我等你不触发了,过段时间再执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值