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数组方法concat()用法实例分析

    JS数组方法concat()用法实例分析 简介 JavaScript中的数组方法concat()可以将多个数组(或值)连接成一个新数组,并返回该新数组。原数组不会被改变。该方法不会改变原始数组,而是返回一个新数组。 该方法是 JavaScript 的一个重要工具,可以用在很多场合。比如: 连接不同的数组,创建一个新的数组。 将一个或多个值添加到数组中。 将数…

    JavaScript 2023年5月27日
    00
  • JS判断元素是否在数组内的实现代码

    判断一个元素是否在一个数组内,是在JS编程中非常常见的问题,一般通过indexOf()函数、includes()函数、for循环等方式实现。 indexOf()函数实现 indexOf() 函数返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。我们可以利用这一特点来实现判断元素是否在数组内。 const arr = [1, 2, 3, 4…

    JavaScript 2023年5月27日
    00
  • js 提取某()特殊字符串长度的实例

    要提取某个特殊字符串长度的实例,可以使用 JavaScript 中的正则表达式(regular expression)。下面是一个简单的步骤: 步骤 1: 定义正则表达式 定义匹配特殊字符串的正则表达式。例如:要匹配所有以”abc”开头的字符串,使用正则表达式 /^abc/g。其中 “^” 表示字符串开头,”g” 表示全局搜索。 步骤 2: 匹配字符串 将要…

    JavaScript 2023年5月28日
    00
  • js实现兔年转圈圈动画示例

    下面我将用Markdown格式文本详细讲解“js实现兔年转圈圈动画示例”的完整攻略。 什么是“js实现兔年转圈圈动画示例” “js实现兔年转圈圈动画示例”是一种使用HTML、CSS和JavaScript技术来实现的动态效果,它可以将一张兔年的图片进行旋转、变换等动态效果的展示。 如何实现“js实现兔年转圈圈动画示例” 步骤一:创建HTML文件 首先,我们需要…

    JavaScript 2023年6月10日
    00
  • JavaScript splice()方法详解

    JavaScript splice()方法详解 简介 JavaScript中的splice()方法是用于修改数组的方法之一。可以用它来添加、删除或替换数组的元素。splice()方法允许您使用起始索引和结束索引来确定要操作的一系列元素。 splice()方法的语法如下: array.splice(start, deleteCount, item1, item…

    JavaScript 2023年5月18日
    00
  • threejs全景图和锚点编辑的实现方案

    让我来为您详细讲解“threejs全景图和锚点编辑的实现方案”吧。 前言 在讲解实现方案前,需要了解一下全景图和锚点的基本概念。 什么是全景图? 全景图是一种圆形或球形的图像,可以通过鼠标或手指的滑动来改变视角,从而可以在360度范围内观察场景中的所有细节,给人带来身临其境的感觉。 什么是锚点? 锚点是指在全景图中设置的一个或多个可点击的点,当用户点击锚点时…

    JavaScript 2023年6月11日
    00
  • js对象数组按属性快速排序

    下面就是关于“js对象数组按属性快速排序”的完整攻略: 1. 排序算法 在排序算法方面,我们可以使用JavaScript内置的sort()函数。sort()方法可以按照指定的方法对数组的元素进行排序,默认排序方式为按字母顺序。如果想要按属性对js对象数组进行排序,则需要传入一个比较函数。 比较函数的语法格式为: function compare(a, b) …

    JavaScript 2023年6月10日
    00
  • JS实现统计字符串中字符出现个数及最大个数功能示例

    下面我将详细讲解“JS实现统计字符串中字符出现个数及最大个数功能示例”的完整攻略。 1. 需求分析 在实现统计字符串中字符出现个数及最大个数功能之前,我们首先需要明确需求。具体来说,我们需要实现以下功能: 统计字符串中每个字符出现的个数; 找出出现次数最多的字符及其出现次数。 2. 实现思路 基于以上需求,我们可以采用以下步骤来实现: 遍历字符串中的每个字符…

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