javascript的防抖节流函数解析

下面就来详细讲解“JavaScript的防抖节流函数解析”的完整攻略。

一、防抖函数

1.1 什么是防抖函数?

防抖函数是一种常用的JS功能,用于延迟搜索框或输入框等交互操作的调用时间,以提高用户的体验和性能。防抖函数会等待用户停止操作,并只在停止时才执行一次操作。

1.2 防抖函数的实现

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

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

// 调用示例
const func = () => console.log('防抖成功');
const debouncedFunc = debounce(func, 2000);
// 触发执行
debouncedFunc(); // 需要等待2s才会执行函数console.log('防抖成功');

上面的代码中使用了闭包,先声明了一个变量timer,保存了需要延迟执行的函数的上次调用时间,用setTimeout设置了一个定时器,在定时器内部调用函数,以达到了延迟调用的效果。

1.3 防抖函数的案例应用

比如在搜索框中,当我们输入内容后,需要向后端发出请求获取相关联的搜索结果,此时使用防抖函数可以避免在用户正在输入时频繁地向服务器发送请求,从而减轻服务器压力。

const input = document.querySelector('input');
input.addEventListener('input', debounce(function() {
  console.log('我在输入,但是只有等我停顿了2s才会发出请求');
}, 2000));

二、节流函数

2.1 什么是节流函数?

节流函数是另一种JS功能,也用于在频繁的调用中优化性能,但与防抖不同,节流只会在固定时间间隔内调用一次特定的函数。

2.2 节流函数的实现

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

function throttle(fn, delay) {
  let lastTime = 0;
  return function() {
    const nowTime = +new Date();
    if (nowTime - lastTime > delay) {
      fn.apply(this, arguments);
      lastTime = nowTime;
    }
  };
}

// 调用示例
const func = () => console.log('节流成功');
const throttledFunc = throttle(func, 2000);
// 触发执行
throttledFunc(); // 第一次触发会立即执行函数console.log('节流成功');
throttledFunc(); // 连续触发则只会在2s内调用一次函数console.log('节流成功');

上面的代码中使用了闭包,先声明了一个变量lastTime,保存了函数上次执行的时间,当下次调用函数时,如果与上次调用相距小于delay的时间,则不执行该函数。

2.3 节流函数的案例应用

比如在 DOM 元素的 drag 或 drop 事件中,更新 UI 太频繁会影响性能,使用节流函数可以避免频繁触发 UI 渲染。

element.addEventListener('drag', throttle(function() {
  console.log('在拖动,但是只有每2s才会进行一次 UI 更新');
}, 2000));

这就是JavaScript防抖节流函数的基本实现原理和应用场景,希望对你有所帮助!

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

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

相关文章

  • javascript中的previousSibling和nextSibling的正确用法

    让我为您详细讲解一下“JavaScript中的previousSibling和nextSibling的正确用法”。 previousSibling和nextSibling的定义 在JavaScript中,previousSibling和nextSibling是DOM节点属性,用于获取兄弟节点中的前一个和后一个节点。 previousSibling:获取上一个…

    JavaScript 2023年6月10日
    00
  • JavaScript实现数字前补“0”的五种方法示例

    JavaScript实现数字前补“0”是一个常见的需求。在编程中,我们经常需要对数字进行前补“0”的操作,以匹配字符串的长度或者满足数据格式的要求。本文将详细讲解五种JavaScript实现数字前补“0”的方法示例。 方法一:字符串拼接 其实,这是最常见的一种方法。可以将数字字符与“0”字符进行拼接,再将结果转换为字符串。拼接前需要判断数字是否占位够用。代码…

    JavaScript 2023年5月28日
    00
  • getElementByID、createElement、appendChild几个DHTML元素第2/2页

    针对这几个DHTML元素,我们一个一个来详细讲解。 getElementByID getElementByID 方法是用于通过 id 属性获取 HTML 元素的方法。它返回一个代表指定元素的对象。使用该方法时,需要在 HTML 元素上指定一个唯一的 id 属性,例如: <div id="example"></div&gt…

    JavaScript 2023年6月10日
    00
  • 如何利用JS实现时间轴动画效果

    下面是详细的“如何利用JS实现时间轴动画效果”的攻略。 1. 确定实现目标 在开始编写JS代码前,首先需要明确实现的时间轴动画效果,例如时间轴的布局样式、时间点的标记形式、动画效果等。明确实现目标有助于后续的编码过程,避免出现不必要的错误。 2. 构建HTML结构 在HTML中构建出时间轴的基本结构,例如采用<ul>和<li>元素表示…

    JavaScript 2023年5月27日
    00
  • js实现简易购物车功能

    下面详细讲解如何通过JS实现简易购物车功能: 1. 功能介绍 一个简单的购物车功能需要实现以下基本功能: 能添加/删除商品到购物车 能显示购物车列表及各商品的信息(如商品名称、封面、价格等) 能统计计算出购物车列表中所有商品的总价值 针对这些功能,我们需要通过JS来实现相应的代码处理。 2. 实现步骤 在实现购物车代码前,需要先明确数据结构和界面设计。我们需…

    JavaScript 2023年6月11日
    00
  • Javascript单元测试框架QUnitjs详细介绍

    Javascript单元测试框架QUnitjs详细介绍 什么是QUnitjs? QUnitjs是JavaScript单元测试框架之一。它最初是为jQuery项目创建的,但是它已经发展成为一个独立的项目,并可以用于测试任何JavaScript代码。 QUnit提供了一组函数来编写测试,并提供了丰富的断言方法,方便开发人员编写测试用例并判断测试结果。它使用简单明…

    JavaScript 2023年6月10日
    00
  • 解决layui的form里的元素进行动态生成,验证失效的问题

    针对“解决layui的form里的元素进行动态生成,验证失效的问题”,我们可以采用以下攻略: 动态生成表单元素 在动态生成表单元素的过程中,需要为每一个生成的表单元素添加 layui 的 form 类属性,示例如下: <input type=”text” name=”username” lay-verify=”required” class=”layu…

    JavaScript 2023年6月10日
    00
  • javascript数组去重方法分析

    一、问题背景 在前端开发中,我们经常需要对JavaScript数组进行去重操作,以便保证数据的一致性和完整性。那么JavaScript数组去重的方法有哪些呢?本文将对目前主流的JavaScript数组去重方法进行详细的分析和讲解。 二、方法分析 利用Set数据结构 Set是ES6中的一种数据结构,它类似于数组,但是成员的值都是唯一的,没有重复的值。我们可以通…

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