js防抖和节流 区别及实现方式,什么是防抖和节流-有什么区别-如何实现-

  js防抖和节流 区别及实现方式,什么是防抖和节流?有什么区别?如何实现?

  本教程运行环境:windows7系统,javascript1.8.5版本1.8.5,戴尔G3电脑。

  

一、防抖

  触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间

  想法:

  动作绑定事件,动作发生一定时间后触发事件。在这段时间内,如果动作再次发生,等待一定时间后再触发事件。功能去抖(fn) {

  设timeout=null//创建一个标志来保存计时器的返回值。

  返回函数(){

  clearTimeout(超时);

  //每当用户输入SetTimeout时,清除以前的SetTimeout。

  timeout=setTimeout(()={

  //然后创建一个新的setTimeout,从而保证输入字符后的间隔

  //如果仍有字符输入,则不会执行fn函数

  fn.apply(this,arguments);

  //因为sayHi函数是全局运行的,所以这个默认指向window。

  //所以使用apply来传入inp的这个

  }, 500);

  };

  }

  函数sayHi() {

  Console.log(防抖成功);

  }

  var InP=document . getelementbyid( InP );

  inp.addEventListener(input ,de bounce(say hi));//防抖。比如你有一个要求,用户在输入框中输入一串字符后自动发送一个ajax请求,如果不做防抖,用户每次改变字符串(删除字符或者输入新字符)都会发送一个请求。但如果做了防抖,当用户输入一个字符,0.5秒后没有改变字符串(这个大概率表示用户已经输入完字符串),请求就会发出。如果字符串在0.5秒内被更改(这种高概率表示当前字符串不是用户要输入的最终字符串),则不会发送请求,重新计算将持续0.5秒,直到用户在发送请求前暂停0.5秒以上。

  

二、节流

  当持续触发事件时,保证一定时间段内只调用一次事件处理函数。所以节流会稀释函数的执行频率

  想法:

  动作绑定事件,事件在一定时间后触发事件。在此期间,如果一个动作再次发生,该动作将被忽略,直到它完成,该事件才会被再次触发。功能油门(fn) {

  设canRun=true//通过闭包保存标记

  返回函数(){

  如果(!canRun)返回;//在函数开始时判断标志是否为真,不为真则返回。

  canRun=false//立即设置为false

  SetTimeout(()={//将外部传入函数的执行放在SetTimeout中。

  fn.apply(this,arguments);

  //最后,setTimeout结束后将标志设置为true (critical)表示下一次可以执行。

  //循环了。当定时器不运行时,标志总是为假,并在开始时返回。

  canRun=true

  }, 500);

  };

  }

  函数sayHi(e) {

  console . log(e . target . inner width,e . target . inner height);

  }

  window . addevent listener( resize ,throttle(say hi));

三、结合应用场景

  debounce(防抖)

  搜索关联,用户连续输入值时,使用防抖节省请求资源。

  当触发窗口大小调整时,不断调整浏览器窗口大小将会不断触发此事件。使用防抖使其仅触发一次。throttle(节流)

  连续点击鼠标触发,mousedown(每单位时间仅一次)

  监听滚动事件,比如是否滑到底部自动加载更多,用throttle来判断。

  【推荐学习:javascript高级教程】以上是javascript中什么是防抖和节流的详细内容。更多请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: