javascript的防抖节流函数解析

yizhihongxing

下面就来详细讲解“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 数组详解

    JavaScript 数组详解 简介 JavaScript 中的数组是一种用于存储和操作一组或多组数据的有序集合。数组可以存储任何类型的数据、可以根据需要进行扩展或缩小。JavaScript 数组有许多强大的方法和属性,可以对数组进行各种处理,例如查找、添加、删除和排序等操作。 数组的基本操作 声明数组 在 JavaScript 中,可以使用以下方式声明一个…

    JavaScript 2023年5月17日
    00
  • js中this的指向问题归纳总结

    绝大部分的新手,在学习JavaScript时都会遇到一个非常常见的问题:无法理解 this 的指向问题。这也是Javascript的一个复杂和有争议性的部分,本攻略旨在帮助读者归纳总结“js中this的指向问题”。 什么是 this this 是 JavaScript 中的一个关键字,它是一个对象,并且它是由函数来调用的。this 的值在每个函数调用的时候都…

    JavaScript 2023年6月10日
    00
  • js鼠标按键事件和键盘按键事件用法实例汇总

    下面是“js鼠标按键事件和键盘按键事件用法实例汇总”的完整攻略。 一、鼠标按键事件 鼠标按键事件是指用户通过鼠标在网页上进行的操作,常用的鼠标按键事件有mousedown、mouseup、click、dbclick、mousemove等。 1. mousedown事件 mousedown事件在鼠标按下的时候触发,常用于实现鼠标拖动等交互效果。示例代码如下: …

    JavaScript 2023年5月28日
    00
  • JavaScript实现钟表案例

    下面是关于“JavaScript实现钟表案例”的完整攻略: 1. 确定页面布局和样式 在创建JavaScript实现钟表的时候,我们首先需要确定页面的布局和样式。这不仅可以让我们更好地控制页面的显示效果,同时也方便我们根据需要编写所需的JS代码。 我们可以在HTML中创建一个div元素,并设置其样式为居中对齐,宽度为500px,高度为500px,边框为1px…

    JavaScript 2023年5月27日
    00
  • 微信小程序可滑动月日历组件使用详解

    下面是关于“微信小程序可滑动月日历组件使用详解”的完整攻略: 一、安装 安装这个可滑动月日历组件很简单,只需要使用npm进行安装即可: npm i calendar-month 二、引用组件 在需要使用月日历组件的页面中,引用月日历组件的wxml文件路径,并在js文件中绑定对应的组件属性即可: <!– 日历组件 –> <calendar…

    JavaScript 2023年6月10日
    00
  • jQuery高级编程之js对象、json与ajax用法实例分析

    jQuery高级编程之js对象、JSON与Ajax用法实例分析 简介 在本文中,我们将讨论jQuery高级编程中的JavaScript对象、JSON数据格式和Ajax用法。JavaScript对象是一个键-值对数据结构的集合,它可以存储和访问对象属性和方法。JSON是一种轻量级数据交换格式,用于在前端和后端之间传输数据。Ajax是一种技术,用于创建异步Web…

    JavaScript 2023年5月27日
    00
  • javascript实现获取服务器时间

    获取服务器时间是Web开发中经常用到的一个功能,javascript可以通过AJAX技术向服务器发送请求获取服务器时间。以下是获取服务器时间的完整攻略: 步骤1. 创建一个API 首先,需要在服务器端创建一个API,用于返回服务器当前时间。API的地址可以是一个后端程序文件或者一个接口。 以php为例,可以通过以下代码实现: <?php header(…

    JavaScript 2023年5月27日
    00
  • Javascript 学习书 推荐

    JavaScript 学习书推荐 JavaScript 是一门广泛应用于 Web 开发的编程语言,也是目前非常热门的一门语言。那么,学习 JavaScript 应该从哪些书籍开始呢? 以下是我推荐的几本 JavaScript 学习书籍: 1.《JavaScript 高级程序设计》 该书可以帮助你逐步深入地了解 JavaScript 基础语法、内部机制以及高级…

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