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

yizhihongxing

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日

相关文章

  • JavaScript将数字转换成大写中文的方法

    将数字转换成大写中文是个很实用的功能,在前端开发中经常会遇到这样的需求。以下是详细的攻略: 方案一:使用中文数字字典映射 将数字转换成大写中文可以先通过一个中文数字字典进行映射,然后依次读取数字,并获取对应的中文数字,最后将其拼接成一个字符串即可。 以JavaScript为例,可以编写以下代码: function convertToChinese(num) …

    JavaScript 2023年6月11日
    00
  • JavaScript实现鼠标移动粒子跟随效果

    下面是讲解“JavaScript实现鼠标移动粒子跟随效果”的完整攻略。 确定目标 首先我们需要明确我们的目标:实现鼠标移动时页面上的粒子跟随鼠标移动。这种效果会增加页面的趣味性和互动性,让用户更有参与感。 分析思路 实现鼠标移动粒子跟随效果,需要做以下几个步骤: 创建画布和粒子; 监听鼠标移动事件; 计算鼠标和粒子之间的距离和角度; 将粒子移动到鼠标所在位置…

    JavaScript 2023年6月11日
    00
  • jQuery中ajax的get()方法用法实例

    下面是“jQuery中ajax的get()方法用法实例”的完整攻略。 简介 在 jQuery 中,我们可以使用 ajax 功能从服务器获取数据。而 get() 方法是 ajax 功能中常用的方法,它会向服务器发送一个 get 请求,获取指定的数据并返回它们。 get() 方法基本用法 $.get(url, [data], [callback], [type]…

    JavaScript 2023年6月11日
    00
  • 如何使用JS在HTML中自定义字符串格式化

    要在HTML中自定义字符串格式化,我们通常使用JavaScript来实现。以下是使用JS在HTML中自定义字符串格式化的完整攻略: 1. String.prototype.format 方法 Javascript 的字符串对象 String.prototype 中提供了一个 format 方法,可以通过占位符的方式快速格式化字符串。 代码示例: const …

    JavaScript 2023年5月19日
    00
  • js 字符串转化成数字的代码

    当我们需要将一个JS字符串转化成数字时,我们可以使用Javascript内置的parseInt() 函数或parseFloat() 函数。 parseInt()函数 parseInt() 函数可解析一个字符串,并返回一个整数。它的语法格式如下: parseInt(string, radix) 其中,string是需要被转换的字符串,radix是进制数,表示被…

    JavaScript 2023年5月28日
    00
  • Django操作cookie的实现

    下面是关于Django操作cookie的实现的完整攻略。 什么是Cookie Cookie是一段很小的文本信息,由网站发送到访问者的浏览器中,并在之后的访问中由浏览器向服务器发送。Cookie通常用于存储用户的偏好设置、登录状态、购物车信息等。 Django中创建和读取Cookie Django使用HttpRequest对象来操作Cookie。其中,创建Co…

    JavaScript 2023年6月11日
    00
  • javascript判断一个变量是数组还是对象

    判断一个变量是数组还是对象是编写 JavaScript 程序中常见的任务,我们可以使用原生 JavaScript 提供的一些方法来实现这个功能。 方法一:使用 typeof 运算符和 Array.isArray() 方法 在 JavaScript 中,我们可以使用 typeof 运算符来检查一个变量的类型,Array.isArray() 方法用来判断一个变量…

    JavaScript 2023年5月27日
    00
  • 浅谈jQuery异步对象(XMLHttpRequest)

    浅谈jQuery异步对象(XMLHttpRequest) 异步对象简介 XMLHttpRequest对象是JavaScript中进行HTTP通信的核心技术之一。它使得web应用程序可以通过JavaScript进行异步HTTP通信,从而在页面不刷新的情况下实现动态更新。jQuery在此基础上封装了自己的异步对象,使得开发者可以更加便捷地使用它来进行AJAX操作…

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