返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JavaScript函数防抖动debounce
  • 633
分享到

JavaScript函数防抖动debounce

2024-04-02 19:04:59 633人浏览 独家记忆
摘要

目录防抖动简述防抖应用示例1.防抖前后示例效果截图2.防抖示例完整 demo防抖动的应用场景防抖动简述 函数防抖动(debounce):防止在短时间内过于频繁的执行相同的任务。 当短

防抖动简述

函数防抖动(debounce):防止在短时间内过于频繁的执行相同的任务。 当短时间内的频繁是不必要的时候,就可以考虑去抖动,避免资源浪费,或造成不好体验。

函数防抖动的原理,主要是利用一次性定时器,延迟任务的执行,在延迟这段时间内, 如果任务再次被触发,则通过 clearTimeout 销毁上一次产生的定时器, 因为定时器的被销毁,之前被延迟执行的任务也会随之被取消执行。 这样就实现了在一定时间内,只执行一次任务。这一次的执行通常是最后一次的触发, 因为此前的触发因为定时器的销毁而被取消了。

多次触发只执行最后一次或许就是和“节流”概念的区别?它两在作用上挺像的,在具体实现上略有不同。 函数防抖(debounce)是短时间内连续多次触发,但只执行最后一次,即是说将多次执行变成了只执行最后一次,执行次数减少。 而节流(throttle)是将短时间的多次执行,变成每隔一段时间执行一次。

防抖应用示例

1.防抖前后示例效果截图

2.防抖示例完整 demo

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>防抖动 Demo</title>
</head>
<body>
<h1>防抖动 Demo</h1>

<label>
    <span>输入昵称:</span>
    <input oninput="inputChange(event.data)"></input>
</label>

<script>

  let timer = null

  function inputChange (data) {
    // 不做防抖动会频繁触发校验,例如连续的输入两个字可能会触发6-7次,
    // 这种频繁程度可能不是必要的,当频繁不是必要的,那么就是资源的浪费。
    // validatePhone(data)

    // 防抖处理,连续正常的输入同样的两个字,只会触发一次校验任务。
    clearTimeout(timer)
    timer = setTimeout(() => {
      validatePhone(data)
    }, 1000)
  }

  function validatePhone (data) {
    let flag = true
    const regPhone = /^1\d{10}$/
    if (!regPhone.test(data)) {
      flag = false
      console.log('校验内容:' + data + '。手机号不正确,请输入1开头的11位手机号')
    }
    return flag
  }
</script>
</body>
</html>

防抖动的应用场景

当任务在短时间内被频繁执行,而这种频繁不是必要的,或不是想要的,就可以考虑使用防抖。 下面是一些场景例子:

①监听滚动条实现左侧内容和右侧导航关联,滚动条的频繁程度很高, 而这种频繁程度可能不是我们想要的,此时就可以考虑使用防抖。

例如我在 javascript实现内容滚动与导航标签互动关联方案中就使用了防抖。

// 监听滚动条
window.addEventListener("scroll", function (e) {
  // 防抖动处理
  clearTimeout(that.timeout)
  this.timeout = setTimeout(() => {
    that.activeNavnode(e)
  }, 100)
});

②表单输入的一些监听事件,例如 oninput 等。

③一些组件库的内容变化监听,例如 el-tree 的 @check-change 事件, 当选择祖先级的选项时,因为包含了选中其子孙项,@check-change 会被频繁触发, 如果这个选项变化关联接口,那么这种频繁可能不是必要的。

下面是一个示例:

    <el-tree
      ref="tree"
      :data="treeData"
      show-checkbox
      @check-change="handleCheckChange">
    </el-tree>
handleCheckChange (data, checked, indeterminate) {
  // 简单的防抖动处理
  clearTimeout(this.timeout)
  this.timeout = setTimeout(() => {
    let checkedKeys = this.$refs.tree.getCheckedKeys()
    // 处理相关业务,例如根据选中的条件,触发接口查询
    // this.$emit('checkChange', checkedKeys.join(';'))
  }, 300)
},

④监听浏览器窗口变化 window.onresize,例如在 echarts 的应用中, 默认浏览器窗口大小改变 echarts 视图布局是不会做响应式改变的, 那么就需要通过监听浏览器窗口大小改变然后去重置 echarts 实现布局的改变。 实践发现,调整一下浏览器窗口大小,会非常多次触发 onresize, 但如果我们也跟着去多次重置 echarts.resize(),这不仅不是必要的, 而且还会造成闪烁频繁,卡顿等不好的体验,以及性能浪费。此时适合用防抖动处理。

下面是一个示例:

// 设备视口大小改变时,重置 echarts
let timer = null
window.onresize = function () {
  // 简单的防抖动处理
  clearTimeout(timer)
  timer = setTimeout(() => {
    console.log(timer)
    chart.resize()
  }, 500)
}

也可以考虑使用闭包的方式,而不必在外面声明 timer,例如这样

// 也可以考虑用闭包的方式
window.onresize = this.debounce(() => {
  chart.resize()
}, 500)

function debounce (fn, delay = 1000) {
  let timer = null
  return () => {
    if (timer) clearTimeout(timer)
    timer = setTimeout(fn, delay)
  }
}

⑤鼠标事件,例如拖拽等的监听等,出于准确性和及时性, 他们的监听响应十分细密,而当这种频繁在业务上可能不是必要的,那么也可以考虑使用防抖动技术。

到此这篇关于JavaScript函数防抖动debounce的文章就介绍到这了,更多相关js防抖动内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: JavaScript函数防抖动debounce

本文链接: https://lsjlt.com/news/150719.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JavaScript函数防抖动debounce
    目录防抖动简述防抖应用示例1.防抖前后示例效果截图2.防抖示例完整 demo防抖动的应用场景防抖动简述 函数防抖动(debounce):防止在短时间内过于频繁的执行相同的任务。 当短...
    99+
    2024-04-02
  • JavaScript 防抖debounce与节流thorttle
    目录一、防抖(Debounce)1.1 防抖函数的实现(1)版本1 —— 停止触发事件n毫秒后执行回调函数(2)版本21.2 防抖的实际应用(1)搜索框建议项...
    99+
    2024-04-02
  • vue怎么实现lodash的debounce防抖
    这篇文章主要介绍“vue怎么实现lodash的debounce防抖”,在日常操作中,相信很多人在vue怎么实现lodash的debounce防抖问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue怎么实现lo...
    99+
    2023-07-04
  • JavaScript如何实现函数防抖
    这篇文章主要介绍了JavaScript如何实现函数防抖,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。函数防抖leading 为是否在进入时立即执行一次, trailing 为...
    99+
    2023-06-27
  • javascript的防抖节流函数解析
    目录防抖节流函数的解析认识防抖和节流函数认识防抖debounce函数防抖函数的案例认识节流throttle函数节流函数的应用场景自定义防抖和节流函数总结防抖节流函数的解析 认识防抖和...
    99+
    2024-04-02
  • JavaScript中函数的防抖与节流详解
    目录一、函数的节流1.1 定义1.2 解决方法1.3 案例演示1.3 .1  代码演示1.3 .2  运行结果1.3 .3  添加函数节流操作1.3 ....
    99+
    2024-04-02
  • JavaScript防抖动与节流处理
    针对一些会频繁触发的事件如scroll、resize,如果正常绑定事件处理函数的话,有可能在很短的时间内多次连续触发事件,十分影响性能。 因此针对这类事件要进行防抖动或者节流处理 防...
    99+
    2024-04-02
  • JavaScript防抖和节流函数代码怎么写
    这篇“JavaScript防抖和节流函数代码怎么写”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JavaScript防抖和节...
    99+
    2023-07-05
  • javascript函数的节流和防抖是什么意思
    本篇内容介绍了“javascript函数的节流和防抖是什么意思”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
    99+
    2024-04-02
  • 如何进行javascript的防抖节流函数解析
    这期内容当中小编将会给大家带来有关如何进行javascript的防抖节流函数解析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。防抖节流函数的解析认识防抖和节流函数防抖和节流的概念其实最早并不是出现在软件工...
    99+
    2023-06-26
  • JavaScript中函数的防抖与节流怎么应用
    本文小编为大家详细介绍“JavaScript中函数的防抖与节流怎么应用”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript中函数的防抖与节流怎么应用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一...
    99+
    2023-06-29
  • JavaScript函数防抖与函数节流的定义及使用详解
    目录一、函数防抖(Debouncing)1、基本概念2、算法思想3、代码实现4、使用场景二、函数节流(Throlle)1、基本概念2、算法思想3、代码实现4、使用场景一、函数防抖(D...
    99+
    2022-11-13
    JavaScript函数防抖 JavaScript函数节流 JavaScript 函数防抖 节流
  • JavaScript防抖动与节流如何处理
    今天小编给大家分享一下JavaScript防抖动与节流如何处理的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。针对一些会频繁触...
    99+
    2023-07-02
  • JavaScript防抖案例讲解
    原理 防抖的原理是:你尽管触发事件,但是我一定要在事件触发n秒之后才执行,如果你在一个事件触发的n秒内又触发了这个事件,那我就以新的事件的时间为准,n秒后再执行。总之,就是要等到你触...
    99+
    2024-04-02
  • vue中如何使用防抖函数
    在vue中使用防抖函数的方法:1.新建utils.js文件,定义防抖函数;2.创建vue.js项目;3.使用import方法引入utils.js文件;4.使用methods方法调用防抖函数;具体方法如下:首先,新建一个utils.js文件,...
    99+
    2024-04-02
  • 如何理解JS函数防抖和函数节流
    目录概述1. 函数防抖(debounce)2. 函数节流(throttle)概述 函数防抖和函数节流都是定义一个函数,该函数接收一个函数作为参数,并返回一个添加了防抖或节流功能后的函...
    99+
    2024-04-02
  • 手写Spirit防抖函数underscore和节流函数lodash
    目录前言防抖函数和节流函数的区别防抖函数的实现基本实现立即执行取消功能返回结果节流函数的实现基本实现leading实现trailing实现取消功能和返回结果前言 防抖函数和节流函数,...
    99+
    2024-04-02
  • JS函数节流和函数防抖实例介绍
    这篇文章主要介绍“JS函数节流和函数防抖实例介绍”,在日常操作中,相信很多人在JS函数节流和函数防抖实例介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JS函数节流和函数防...
    99+
    2024-04-02
  • JavaScript 防抖和节流详解
    目录防抖节流总结防抖 自动门感应到有人,打开门,并且开始5秒倒计时,在 5 s 内有另外一个人靠近到门,门感应到人,重新5秒倒计时 当事件被触发时,设定一个延迟,若期间事件又被触发...
    99+
    2024-04-02
  • JavaScript防抖与节流详解
    目录防抖debounce节流throttle总结防抖debounce 定义:对于短时间内连续触发的事件,比如滚动事件,防抖就是让某个时间期限内,事件处理函数只执行一次。 关于防抖,...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作