手写节流与防抖

节流与防抖是前端项目开发中,节约请求资源的一种实用方式,实现方式也很简单。下面分别介绍其原理与实现:

 1. 节流函数(throttle):需要频繁触发的函数,在设定规定时间内,函数只触发一次,后面的触发要等间隔时间。(可以理解为:放技能需要等冷却)

应用场景:鼠标点击、滚轮事件

实现方式:一般采用时间戳

    //fn:要被节流的函数  delay:间隔时间
    function throttle(fn, delay) {
        let lastTime = 0; //记录上一次的函数触发时间

        return function() {
            let nowTime = Date.now(); //记录本次的函数触发时间
            if (nowTime - lastTime > delay) {
                return fn.apply(this); //修正this指向
                lastTime = nowTime;
            }
        }
    }
    document.onscroll = throttle(function() {
        console.log('throttle函数执行了' + Date.now());
    }, 600)

2. 防抖函数(debounce):在规定时间内,需要频繁触发的函数,每次触发会重新计时,只让函数最后一次的触发生效。(可以理解为:连续点回城只有最后一次能成功)

应用场景:用户在input框不断输入值时、不断的调整浏览器窗口大小时

实现方式:一般采用定时器

    function debounce(fn, delay) {
        var timer = null;
        return function() {
            clearTimeout(timer);
            timer = setTimeout(function() {
                fn.apply(this);
            }, delay);
        }
    }
    document.onscroll = debounce(function() {
        console.log('debounce函数执行了' + Date.now());
    }, 1200)

3. 什么时候用节流或者防抖?

可以想象:

        为了避免用户太多点击事件或者滚轮滑动太过频繁,导致请求资源太多对服务器造成压力过大,需要限制时间间隔让服务器缓口气。这时就需要节流!

        对于输入框中填入密码这种,每输入一个字符且没有输入完毕时,没必要实时监控变化,可以给它一个时间段,从而避免频繁请求资源。这时就可以用防抖!

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白目

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值