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日

相关文章

  • 时间处理工具 dayjs使用示例详解

    时间处理工具 dayjs使用示例详解 什么是dayjs dayjs是一个轻量级的处理时间和日期的Javascript库,它和moment.js类似,并且API设计相似,但是dayjs更小、更快,支持浏览器和Node.js环境。 安装dayjs dayjs提供两种方式使用:安装node模块和使用CDN。 根据使用场景进行选择,这里我们介绍如何安装node模块 …

    JavaScript 2023年5月27日
    00
  • js 数字、字符串、布尔值的转换方法(必看)

    JS 数字、字符串、布尔值的转换方法 转换为数字 parseInt() parseInt() 函数可将一个字符串转换为整数。 let str = ’15px’; let num = parseInt(str); console.log(num); // 15 可以设置第二个参数表示进制。 let str = ‘1011’; let num = parseIn…

    JavaScript 2023年5月28日
    00
  • JScript的条件编译

    JScript条件编译是一种用于限定JScript代码在不同平台或环境下执行的方法,它可以通过编译器指令来控制代码的编译或排除,这对于处理不同浏览器或操作系统上的兼容性问题非常有用。 基本语法 JScript条件编译使用如下的语法: /*@if [condition]*/ // code to evaluate if condition is true /*…

    JavaScript 2023年6月11日
    00
  • 详解JavaScript事件循环

    详解JavaScript事件循环 在了解JavaScript事件循环之前,我们需要先了解几个概念。 概念 进程和线程 进程是一个程序在计算机内被执行的实例。 线程是在进程内独立执行的最小单元。 单线程和多线程 单线程指的是一个进程只有一个线程,多线程指的是一个进程有多个线程。 Javascript是一门单线程语言,无法同时执行多个任务,因此需要采用事件循环机…

    JavaScript 2023年5月18日
    00
  • 你可能不知道的JavaScript的new Function()方法

    当我们需要在JavaScript中动态地创建一个函数时,可以使用new Function()方法。它的语法是: new Function([arg1,arg2,…..argn], functionBody) 其中,第一个参数是要创建的函数的参数列表,是一个逗号分隔的字符串,可选。第二个参数是函数体,是一个字符串,必填。 例如,创建一个add函数来做加法运…

    JavaScript 2023年5月27日
    00
  • JS获取IP、MAC和主机名的五种方法

    当网站需要获取客户端设备的IP、MAC地址或主机名时,我们可以使用JavaScript来实现。接下来,我们将会介绍五种获取这些信息的方法。 获取IP地址的方法 使用XMLHttpRequest对象向外部API发起请求,从响应中获取IP地址信息。 function getIP() { const xhr = new XMLHttpRequest(); xhr.…

    JavaScript 2023年5月28日
    00
  • JavaScript 中的 this 绑定规则详解

    我将为您详细讲解“JavaScript 中的 this 绑定规则详解”。该攻略将包含以下几个部分: JavaScript 中的 this 指代什么 this 绑定规则的类型和用法 示例说明 1. JavaScript 中的 this 指代什么 在 JavaScript 中,this 关键字的值取决于函数的调用方式。this 通常指代当前执行上下文的对象。在全…

    JavaScript 2023年6月10日
    00
  • JavaScript Math.floor方法(对数值向下取整)

    JavaScript Math.floor方法 Math.floor() 方法会返回小于等于所传参数的最大整数。 语法 Math.floor(x) 参数 x:必需。一个数值,将被下舍入为整数。 返回值 返回小于等于 x 的最大整数。 示例1:向下取整 var a = Math.floor(4.3); // 4 var b = Math.floor(9.999…

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