js 面试 防抖和节流应用场景和实例

1 防抖概念:

防抖应用场景:

防抖代码:

  利用定时器:

let timer = null;

function fangdou(){
        if(timer !== null){
                clearTimeout(timer)
        }

        timer = setTimeout({
                console.log('防抖')
        },1000)
}

2 节流概念

节流使用场景:

节流代码:

利用定时器:

let timer = null;

funtciont jieliu(){
        if(timer !==null){
                return;
        }
        timer = setTimeout({
                console.log('节流')

                timer = null;
        },1000)
}

1 防抖

场景:比如 登录,验证码, input中输入联想查询,浏览器窗口拖动变化等等

实例:

<input type="text" id="fd" value="防抖" />

<input type="submit" id="btn" value="提交" />

var fd = document.querySelectore("#fd");

var btn = document.querySelector("#btn");

btn.addEventListener('click',antiShake(getFun,2000));

function getFun(e){

  var val = fd.value;

  console.log(val);//

  console.log(this) //通过fn.apply(arguments) this指向,指向了btn点击的指向

}

//防抖

function antiShake(fn,time){

  var t = null;//定时器

  // var that = this;

  return function(e){

    var that = this;

    if(t){//判断定时器是否生成,生成了就清除上一次定时器。

      clearTimeout(t)

    }

    //如果是第一次点击就立即执行

    var firstClick = !t;

    if(firstClick){

      //fn();

      fn.apply(that,arguments) //改变指向

    }

    //两秒内点击不会再次执行fn函数。

    t = setTimeout(function(){

      t = null;

    },time)

  }

}

2 节流

     节流:控制在2-3秒发生一次事件。

应用场景:滚动事件,每个2-3秒触发一次

         实时搜索框:每隔2-3秒搜索一次

var fd = document.querySelectore("#fd");

var btn = document.querySelector("#btn");

btn.addEventListener('click',throttle(getFun,2000));

function getFun(e){

  var val = fd.value;

  console.log(val);//

}

function throttle(fn,time){

  var beginTime = 0;//初始值

  return function(){

    //拿到当前的时间戳

    var date = new Date().getTime();

    var that = this;

    if(data-beginTime > time){//大于设定时间-- 就可以执行了

      fn.apply(that,argument)

      beginTime = date;

    }

  }

}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值