美文网首页
前端日常——节流

前端日常——节流

作者: CCCCCccccccch | 来源:发表于2019-10-22 12:18 被阅读0次

一、什么是节流

当持续触发事件时,在规定时间段内只调用一次回调函数。如果在规定时间内又触发了该事件,则什么都不做,也不重置定时器。

与防抖相比较:

防抖是将多次执行变为最后一次执行,节流是将多次执行变为在规定时间内只执行一次。一般不会重置定时器,即不会if(timer) clearTimeout(timer);(时间戳+定时器版除外)

二、应用场景

两个条件:

1、用户连续频繁地(事件触发的时间间隔比规定的时间要短)触发事件

2、用户不只关心“最后一次”操作后的结果反馈,而是在操作过程中的持续反馈。

如:鼠标不断点击触发,点击事件在规定时间内只触发一次(单位时间内只触发一次);监听滚动事件,比如是否滑到底部加载更多,用throttle来判断。

三、原理

两种实现方式:

1、时间戳方式:通过闭包保存上一次的时间戳,然后与事件触发的时间戳比较,如果大于规定时间,则执行回调,否则就不作处理。特点:一般第一次会立即执行,之后连续频繁地触发事件,也是超过了规定时间才会执行一次。最后一次触发事件,也不会执行(因为如果你最后一次触发时间大于规定时间,这样就算不上连续触发了)。

2、定时器方式:原理与防抖类似,通过闭包保存上一次定时器状态,然后事件触发时,如果定时器为null(即代表此时间隔时间已经大于规定时间),则设置新的定时器,到时间后执行回调函数,并将定时器设置为null。特点:当第一次触发事件时,不会立即执行函数,到了规定时间后才会执行,之后连续频繁地触发事件,也是到了规定时间才会执行一次(因为定时器)。当最后一次停止触发后,由于定时器的延时,还会执行一次回调函数(是上一次成功触发执行的回调,而不是你最后一次触发产生的)。一句话总结就是延时回调,你能看到的回调都是上次成功触发产生的,而不是你此刻触发产生的。

这两种最大的区别是:时间戳版的函数触发是在规定时间开始的时候,而定时器的函数触发是在规定时间结束的时候。

四、代码实现

1、时间戳版:

2、定时器版:

3、时间戳+定时器版(实现第一次触发可以立即响应,结束触发也能有响应,该版才最符合实际工作要求)

相关文章

  • 前端日常——节流

    一、什么是节流 当持续触发事件时,在规定时间段内只调用一次回调函数。如果在规定时间内又触发了该事件,则什么都不做,...

  • vue项目实现导入/导出Excel

    前端方案 首先安装依赖包 前端实现方案 后端处理导出 前端通过字节流或者url实现导出,字节流方式导出的文件方式可...

  • 前端性能优化:手写实现节流防抖

    前端性能优化:手写实现节流防抖 本文首发于 前端性能优化:手写实现节流防抖[https://gitee.com/r...

  • 前端节流

    前端节流(规定时间内只出发一次,规定时间内再次触发则无效)

  • 说说前端的防抖和节流以及最简单的实现

    防抖和节流在前端是很常见的知识点,并且也是常见的面试题。 00 背景 防抖和节流在前端中是应用很常见的,特别是在 ...

  • 2019年一些前端的面试题(含答案)2.0

    上一篇链接:2019年一些前端的面试题(含答案) 7、手写函数防抖和函数节流 函数节流 函数节流是让这个函数在间隔...

  • 如何理解debounce和throttle?

    前端工程师们都听过看起来很高级的词,节流和防抖,其实节流就是debounce,防抖就是throttle,其实这个也...

  • 前端性能优化——节流

    和防抖不同,节流操作是指在连续触发某一事件的情况下,每隔一段时间就触发一次事件,时间固定,具体的使用场景和防抖的类...

  • vue 前端节流

    /** * 函数节流 方法封装 * @param fn * @param interval ...

  • 前端节流(throttle)和防抖动(debounce)

    上一期是 JS 高阶函数的入门,这一期再来谈谈高阶函数在前端最常见的两个应用——节流和防抖动 节流(throttl...

网友评论

      本文标题:前端日常——节流

      本文链接:https://www.haomeiwen.com/subject/zttmyctx.html