js防抖函数和节流函数使用场景和实现区别示例分析

JS防抖函数和节流函数是前端开发中常用的函数优化方法,可以有效提升页面性能和用户体验。它们的使用场景和实现区别如下:

防抖函数

防抖函数的作用是在函数触发频繁的情况下,限制函数执行的次数,确保函数在触发后的一定时间内只执行一次。

使用场景

防抖函数通常用于以下场景:

  • 搜索框输入联想:用户在输入框中快速输入字符时,会触发搜索请求,而防抖函数可以限制请求发送的次数,避免频繁的请求。
  • 按钮提交事件:由于用户可能会多次点击提交按钮,而防抖函数可以确保只有最后一次点击会触发提交事件。

实现方式

使用JavaScript实现防抖函数的代码如下:

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

上述代码实现了一个通用的防抖函数。其中,fn参数是需要处理的函数,delay参数是限制函数执行的时间间隔。函数返回一个闭包,用来保存定时器对象和参数列表。当此函数被执行时,首先清除之前的定时器,然后再设置一个新的定时器,并在一定时间内执行函数。

示例说明

假设我们有一个搜索框输入联想功能,需要尽可能地减少发送网络请求的次数,我们就可以使用防抖函数优化代码:

<input type="text" id="search">
<script>
const searchInput = document.getElementById('search');
const debounceSearch = debounce(() => {
  // 发送搜索请求
}, 300);

searchInput.addEventListener('input', debounceSearch);
</script>

上述代码中,我们为输入框添加了input事件,当用户在输入框中输入字符时,会触发debounceSearch函数。由于debounce()函数的第二个参数是300ms,所以当用户在300ms内持续输入字符时,不会触发搜索请求。等待300ms后,会执行最后一次输入操作所触发的搜索请求。

节流函数

节流函数的作用是在函数持续频繁触发的情况下,限制函数的执行频率,确保函数在一定时间片段内只执行一次。

使用场景

节流函数通常用于以下场景:

  • 页面滚动监听:页面滚动事件会频繁触发,但是实际上只需要显示当前滚动位置附近的内容,而节流函数可以确保滚动事件每隔一定时间片段才触发。
  • 鼠标移动事件:鼠标移动事件同样会频繁触发,而节流函数可以确保每隔一定时间间隔才触发鼠标移动事件。

实现方式

使用JavaScript实现节流函数的代码如下:

function throttle(fn, delay) {
  let last = 0;
  return function(...args) {
    const now = Date.now();
    if (now - last > delay) {
      fn.apply(this, args);
      last = now;
    }
  }
}

上述代码实现了一个通用的节流函数。其中,fn参数是需要处理的函数,delay参数是限制函数执行的时间间隔。函数返回一个闭包,用来保存上一次函数执行的时间戳。当此函数被执行时,如果当前时间和上一次执行时间超过了设定的时间间隔,则执行一次函数,并更新上一次执行时间。

示例说明

假设我们需要在页面滚动时来更新页面标题,但是需要确保标题的更新频率不要太高,我们就可以使用节流函数优化代码:

<h1 id="title">标题</h1>
<script>
const titleElement = document.getElementById('title');
const throttleUpdateTitle = throttle(() => {
  const scrollTop = document.documentElement.scrollTop;
  titleElement.innerText = `当前滚动高度:${scrollTop}px`;
}, 300);

window.addEventListener('scroll', throttleUpdateTitle);
</script>

上述代码中,我们为window对象的scroll事件添加了节流函数throttleUpdateTitle。当用户滚动页面时,会更新标题文字,但是由于节流函数设置的时间间隔为300ms,所以每次滚动事件只有间隔大于300ms时才会更新标题文字。这样可以避免滚动引起的频繁更新,提高页面性能和用户体验。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js防抖函数和节流函数使用场景和实现区别示例分析 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • 简单了解JavaScript中的new Function

    下面是有关JavaScript中的new Function的详细解释和示例: 什么是new Function? new Function是JavaScript语言中的一种特殊语法,它可以使用字符串的形式来动态创建一个函数。 语法格式如下: new Function([param1, param2, …paramN], functionBody) 其中,p…

    JavaScript 2023年5月27日
    00
  • JavaScript函数中上下文有哪些规则

    JavaScript中的函数实际上是对象,和其他对象一样在创建时会得到一个[[Scope]]属性,用于指向函数创建时的作用域链。这个作用域链保存了在函数创建时的变量对象和外部词法环境的引用关系。在函数调用时,JavaScript会创建一个活动对象(也称为执行上下文),用于保存函数执行过程中产生的变量对象、函数调用参数、this指向等信息。 JavaScrip…

    JavaScript 2023年5月27日
    00
  • 15位和18位身份证JS校验的简单实例

    下面我将为你详细讲解如何实现“15位和18位身份证JS校验的简单实例”。 校验15位和18位身份证简单实例 1. 判断身份证长度 在对身份证进行校验之前,需要先判断身份证长度是否合法。根据规定,15位身份证和18位身份证长度分别是15和18位。具体实现代码如下所示: function checkIdCard(idCard) { // 判断身份证长度 if (…

    JavaScript 2023年6月10日
    00
  • js键盘事件实现人物的行走

    关于“js键盘事件实现人物的行走”的攻略,我可以提供以下几点内容: 实现过程 获取元素和初始化人物位置 首先需获取人物元素,以及初始化人物所在的位置。获取元素可以使用document.getElementById()或document.querySelector()方法,而初始位置可以使用CSS属性left和top来设置。 const man = docum…

    JavaScript 2023年6月11日
    00
  • 使用data URI scheme在网页中内嵌图片使用介绍

    当我们在网页中使用图片时,通常会通过标签的src属性来引入一个外部的图片文件。不过,我们也可以使用data URI scheme来直接把图片嵌入到HTML代码中,这种方式可以减少HTTP请求的数量,提升页面加载速度。接下来,我将详细讲解如何使用data URI scheme在网页中内嵌图片。 什么是data URI scheme? data URI sche…

    JavaScript 2023年6月1日
    00
  • 5个最佳的Javascript日期处理类库分享

    以下是关于“5个最佳的Javascript日期处理类库分享”的详细攻略。 1. moment.js Moment.js是最流行的JavaScript日期库之一,提供了丰富的日期和时间功能。它有强大的解析和格式化能力,可以将日期和时间的字符串转换为具体的时间对象。此外,它还提供了一些处理日期的有用方法,例如计算时间差,生成时间序列等。 以下是一个使用Momen…

    JavaScript 2023年5月27日
    00
  • js怎么判断是否是数组的六种方法小结

    下面是详细讲解“js怎么判断是否是数组的六种方法小结”的完整攻略。 标题 js怎么判断是否是数组的六种方法小结 正文 在JavaScript中,有许多方法可以判断一个变量是否是数组。下面是六种判断方法的小结。 方法一:使用instanceof 使用instanceof操作符可以判断变量是否是数组。如果变量是数组,返回true,反之返回false。 示例代码:…

    JavaScript 2023年5月27日
    00
  • JavaScript的内置对象Date详解

    JavaScript的内置对象Date详解 1. Date对象概述 Date对象是JavaScript的内置对象,它封装了时间和日期相关的方法。使用Date对象,可以获取当前的日期和时间,还可以进行日期和时间的运算以及格式化输出。该对象提供的方法非常丰富,能够满足大部分与时间有关的需求。 2. 创建Date对象 Date对象可以通过以下两种方式进行创建: 2…

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