防抖和节流函数

 

阅读目录

  • 一 .防抖函数
  • 二 .节流函数
  • 三 .个人理解两者的区别
 

一、防抖函数

1.1 概念:

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

1.2 使用场景:

  就像是我的搜索栏功能,是在里面内容变化后就实时触发搜索事件,但是有时候我们输
  的内容很长,在没有输完的时候就触发了事件,这样对性能来说是不好的,造成了很多
  无用的请求,这时候就需要用到防抖函数,来让其在搜索内容变化后的200毫秒内如果
  没有再更改才发起请求。

1.3 实现防抖函数的思路:

  在高频触发事件的时候,取消原来的延时事件。

1.4 具体实现:

  

function debounce( fn ){ // 传一个回调函数
let Mytime = null ;
return function( ){
clearTimeout( Mytime ) ; // 清除定时器
Mytime = setTimeout( () => {
fn.apply(this,arguments)
}, 200)
}
}

1.5 具体使用

function sayHi() {
console.log('防抖成功');
} var select = document.getElementById('myselect');
select .addEventListener('change', debounce(sayHi)); // 防抖
二、节流函数

2.1 概念:

  高频事件触发,但在n秒内只会执行一次,所以节流会稀释函数的执行频率;

2.2 使用场景:

  就像我接了一个任务,只能在5秒完成任务给回复,在执行后的这5秒内,你再怎么给
  我布置任务我都不管直接当没听到,直到到5秒后执行完这个任务,你才可以再次给
  我布置任务,以此类推。。。

2.3 实现思路:

  每次触发事件时都判断当前是否有等待执行的延时函数,如果有直接截断事件不用往下执行了;

2.4 具体实现:

  

function throttle( fn ){
let canUse = true ; // 设置一个开关
return function(){
if(!canUse ){ return false } // 如果开关已经关掉了就不用往下了
canUse = false // 利用闭包刚进来的时候关闭开关
setTimeout( ( ) => {
fn.apply(this,arguments)
          canUse = true // 执行完才打开开关
},500)
}
}

2.5 具体使用:

function sayHi(e) {
console.log(e.target.innerWidth, e.target.innerHeight);
}
window.addEventListener('resize', throttle(sayHi));

三、个人理解两者的区别

防抖函数和节流函数的一个区别就是防抖是按照最后一次触发为下一次事件执行的时间计算点,
前面的没满足间隔时间的都从最后这一次开始来决定什么时候执行延时事件;
而节流函数是按照第一次触发事件作为时间计算点,后面没到间隔时间的事件都忽略;

JS基石之-----防抖节流函数的更多相关文章

  1. vue防抖节流函数---组件封装,防止按钮多次点击

    1.vue 封装utils.js /** * @param {function} func 执行函数 * @param {number} time 防抖节流时间 * @param {boolean} ...

  2. vue 防抖节流函数——组件封装

    防抖(debounce) 所谓防抖,就是指触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间. 节流(throttle) 所谓节流,就是指连续触发事件但是在 ...

  3. JavaScript防抖节流函数

    1.直接上码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <ti ...

  4. js实现之--防抖节流【理解+代码】

    防抖: 理解:在车站上车,人员上满了车才发走重点是人员上满触发一次. 场景:实时搜索,拖拽. 实现: //每一次都要清空定时器,重新设置上计时器值,使得计时器每一次都重新开始,直到最后满足条件并且等待 ...

  5. 【跟着大佬学JavaScript】之lodash防抖节流合并

    前言 前面已经对防抖和节流有了介绍,这篇主要看lodash是如何将防抖和节流合并成一个函数的. 初衷是深入lodash,学习它内部的好代码并应用,同时也加深节流防抖的理解.这里会先从防抖开始一步步往后 ...

  6. JS奇淫巧技:防抖函数与节流函数

    应用场景 实际工作中,我们经常性的会通过监听某些事件完成对应的需求,比如: 通过监听 scroll 事件,检测滚动位置,根据滚动位置显示返回顶部按钮 通过监听 resize 事件,对某些自适应页面调整 ...

  7. JS 防抖函数和节流函数

    文章转载自:木上有水 什么是防抖?什么是节流? 工作中我们经常会用一些方法监听某些事件的完成,比如scroll.resize.keyup等. 常规事件触发的时候,比如scroll,会在短时间内触发多次 ...

  8. js前端性能优化之函数节流和函数防抖

    前言:针对一些会频繁触发的事件如scroll.resize,如果正常绑定事件处理函数的话,有可能在很短的时间内多次连续触发事件,十分影响性能 节流: 节流:使得一定时间内只触发一次函数. 它和防抖动最 ...

  9. JS函数防抖与函数节流

    概念 函数防抖(debounce) 当调用动作过n毫秒后,才会执行该动作,若在这n毫秒内又调用此动作则将重新计算执行时间 函数节流(throttle) 预先设定一个执行周期,当调用动作的时刻大于等于执 ...

随机推荐

  1. 笔试12:Bootstrap知识

    BootStrap Bootstrap,来自 Twitter,是目前最受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷. ...

  2. 201871010110-李华《面向对象程序设计(java)》第十三周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  3. Shell变量——用户变量

    1.Shell变量: (1)命令规则:由数字.字母.下划线组成,首字符不能为数字. (2)变量的默认类型都是字符串型,对于数值类型,则必须进行指定. (3)大小写敏感的,例如:ASD.asd.Asd是 ...

  4. Spring Cloud Gateway 结合配置中心限流

    前言 上篇文章我讲过复杂的限流场景可以通过扩展RedisRateLimiter来实现自己的限流策略. 假设你领导给你安排了一个任务,具体需求如下: 针对具体的接口做限流 不同接口限流的力度可以不同 可 ...

  5. python实现的WebSocket客户端

    code #coding=utf- import json import time from websocket import create_connection ws = create_connec ...

  6. C#快速入门指南

    C# C#集成开发环境结构结构体枚举接口派生类全析 集成开发环境 Visual Studio 结构 using System; 包含 System 命名空间 class hello{ /*注释*/ s ...

  7. windowserver -------- 修改服务器防火墙

    再服务器中安装好软件的时候,我们通过别的电脑来访问服务器中的软件的时候,会出现访问不了的情况,这是可能是因为服务器中的防火墙中的进站端口,没有开放,一般软件进行部署的时候会开放801到 810 之间的 ...

  8. Unity调用windows系统dialog 选择文件夹

    #region 调用windows系统dialog 选择文件夹 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] public ...

  9. 【More Effective C++ 条款3】最好不要以多态方式处理数组

    1.在数组与多态混用的情况下,数组元素的访问会出现不可预期的结果(因为数组元素的访问会使用到下标运算) 将一个子类对象数组传递给一个父类对象数组声明的函数,编译器会允许这个行为,但是由于子类对象和父类 ...

  10. C++中的双冒号作用

    1. 作用域符号::的前面一般是类名称,后面一般是该类的成员名称,C++为例避免不同的类有名称相同的成员而采用作用域的方式进行区分如:A,B表示两个类,在A,B中都有成员member.那么      ...