JS函数节流和函数防抖问题分析

JS函数节流和函数防抖问题分析

函数节流

函数节流是指在一定时间内只执行一次该函数。即使该函数被连续调用多次,但在规定的时间内,它只会执行一次。

函数节流比较适用于一些高频率触发的操作,例如:

  • 滚动页面时触发的事件(scroll事件);
  • 缩放浏览器窗口时触发的事件(resize事件);
  • 拖动元素时触发的事件(drag事件)等。

下面是一个函数节流的示例代码:

function throttle(fn, delay) {
  let timer;
  return function() {
    const context = this;
    const args = arguments;
    if (!timer) {
      timer = setTimeout(() => {
        fn.apply(context, args);
        timer = null;
      }, delay);
    }
  };
}

function handleScroll() {
  console.log('scroll event triggered');
}

window.addEventListener('scroll', throttle(handleScroll, 1000));

上面的代码中,我们定义了一个throttle函数,用于返回一个新函数,这个新函数具有函数节流的功能。我们将原始函数作为参数传入throttle函数,并传入一个时间间隔delay。当原始函数被连续调用时,新函数会将前一个时间段内的所有调用忽略,并等待一个时间间隔后再执行一次。

函数防抖

函数防抖是指在一段时间内,多次触发同一事件,只执行最后一次该事件的处理。也就是说,当高频率触发事件时,只会执行一次该事件的处理。

函数防抖适用于以下场景:

  • 搜索框输入实时搜索,可以设置一定的延迟时间,当用户连续输入时,只有等用户停止输入后,再去请求数据;
  • 按钮防抖,例如防止用户连续快速点击多次提交按钮等。

下面是一个函数防抖的示例代码:

function debounce(fn, delay) {
  let timer;
  return function() {
    const context = this;
    const args = arguments;
    if (timer) {
      clearTimeout(timer);
    }
    timer = setTimeout(() => {
      fn.apply(context, args);
      timer = null;
    }, delay);
  };
}

function handleInput() {
  console.log('search input change');
}

const inputElem = document.querySelector('#search-input');
inputElem.addEventListener('input', debounce(handleInput, 500));

上面的代码中,我们定义了一个debounce函数,用于返回一个新函数,这个新函数具有函数防抖的功能。我们将原始函数作为参数传入debounce函数,并传入一个时间间隔delay。当原始函数被连续调用时,新函数会在每次调用时清除前一个时间间隔内的定时器,并重新设置一个新的定时器。这样,在规定的时间间隔内,如果多次触发事件,它只会执行最后一次事件处理。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS函数节流和函数防抖问题分析 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • JS实现超简单的汉字转拼音功能示例

    下面我将介绍一下如何使用JavaScript实现一个超简单的汉字转拼音功能。 安装拼音库 首先,我们需要使用拼音转换库来完成汉字转拼音的功能。这里我们使用pinyin.js库,可以通过npm命令进行安装: npm install pinyin 引入库 安装完成后,我们需要在脚本中引入pinyin.js库。有两种方式可以实现,一种是直接通过script标签引入…

    JavaScript 2023年5月19日
    00
  • vue3.0 router路由跳转传参问题(router.push)

    下面我详细讲解一下”Vue3.0 Router路由跳转传参问题(router.push)”的完整攻略。 1. 问题 在Vue3.0中使用Router进行路由跳转时,需要传递参数,但是参数传递的方式有很多,如何选择最合适的方式呢? 2. 解决方案 Vue3.0中使用Router进行路由跳转时,可以使用以下几种方式进行参数传递。 2.1 Query参数传递 使用…

    JavaScript 2023年6月11日
    00
  • javascript学习笔记(十二) RegExp类型介绍

    下面是关于“javascript学习笔记(十二) RegExp类型介绍”的完整攻略。 RegExp类型介绍 RegExp类型是JS语言中表示正则表达式的类型。正则表达式是一种用于模式匹配的工具,可以用来匹配字符串中的文本模式,在字符串的搜索、替换、切割等操作中特别方便。 创建RegExp实例 创建RegExp实例的两种方式: 字面量方式 javascript…

    JavaScript 2023年6月10日
    00
  • jsPDF导出pdf示例

    以下是关于如何使用jsPDF导出pdf的详细攻略,包含两个示例。 什么是jsPDF jspdf是一个用于生成PDF文件的JavaScript库。它可以在浏览器端和Node.js环境中使用。它可以轻松地将HTML内容转换为PDF文件,例如HTML文本,SVG图像等。 安装jsPDF 你可以通过npm安装jsPDF: npm install jspdf –sa…

    JavaScript 2023年5月27日
    00
  • js+canvas实现两张图片合并成一张图片的方法

    首先,我们需要创建一个基础的HTML文件,并在其中添加一个canvas标签和两个img标签,用来实现两张图片的显示和合并。 <!DOCTYPE html> <html> <head> <title>JS+Canvas实现图片合并</title> <meta charset="utf-…

    JavaScript 2023年6月10日
    00
  • JavaScript的parseInt 取整使用

    下面是关于JavaScript中parseInt方法的取整使用的完整攻略: 什么是 parseInt 方法 parseInt 方法是 JavaScript 内置的一个函数,用来将一个字符串转换成整数(Number)。 它的语法格式如下: parseInt(string, radix) 其中: string:需要转换成整数的字符串。 radix:可选,表示转换…

    JavaScript 2023年5月28日
    00
  • JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】

    下面是JavaScript求一组数的最小公倍数和最大公约数常用算法的详解。 什么是最小公倍数和最大公约数 在数学中,对于给定的两个或多个整数,最小公倍数是可以被其中的每一个整数整除的最小正整数,最大公约数是可以被两个或多个整数整除的最大正整数。最小公倍数和最大公约数常常用于解决各种数学问题,如分数的化简、幂的约分等等。 算法介绍 最大公约数的求解方法 在求两…

    JavaScript 2023年5月28日
    00
  • JavaScript代码生成PDF文件的方法

    生成PDF文件是Web应用程序开发中的一个常见需求,它可以用于生成形式化文档并且作为下载文件提供给用户。虽然浏览器不具有直接生成PDF文件的功能,但是可以通过JavaScript代码调用第三方库来实现生成功能。通过以下步骤可以实现JavaScript代码生成PDF文件的方法: 步骤一:选择合适的第三方库 在实现JavaScript代码生成PDF文件的过程中,…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部