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日

相关文章

  • Handtrack.js库实现实时监测手部运动(推荐)

    下面我将详细介绍如何使用Handtrack.js库实现实时监测手部运动。 1. 简介 Handtrack.js是一个基于Tensorflow.js的开源JavaScript库,用于实时监测手部运动。它使用深度学习模型实现手部位置的检测,并可以通过调用API实时对手部位置进行跟踪。Handtrack.js可以在浏览器中运行,而无需安装任何其他软件。 2. 前提…

    JavaScript 2023年6月11日
    00
  • CSS对Web页面载入效率的影响分析总结

    CSS对Web页面载入效率的影响分析总结 CSS样式表对Web页面的载入效率有着重要的影响,不合理使用会导致页面的加载速度过慢,影响用户访问体验。因此,优化CSS样式表的使用对Web页面性能优化至关重要。下面将从以下几个方面对CSS对Web页面载入效率的影响进行总结。 CSS文件大小的影响 CSS文件大小是影响Web页面载入效率的主要因素之一。较大的CSS文…

    JavaScript 2023年6月10日
    00
  • 详细介绍8款超实用JavaScript框架

    详细介绍8款超实用JavaScript框架 JavaScript 拥有十分丰富的生态系统,框架也是其中不可忽视的一部分。下面是8款超实用的 JavaScript 框架,它们受欢迎的原因在于它们能帮助程序员节省时间和提高效率。 1. jQuery jQuery 是最受欢迎的 JavaScript 框架之一。jQuery 旨在简化 HTML 文档遍历、事件处理、…

    JavaScript 2023年5月18日
    00
  • JavaScript面向对象中接口实现方法详解

    JavaScript面向对象中接口实现方法详解 在JavaScript面向对象编程中,我们常常需要定义接口(interface)来规定类(class)必须实现的方法。在本篇攻略中,我们将详细讲解如何实现JavaScript中的接口。 什么是接口? 在编程中,接口是一种规范或者约束,它定义了类或者对象应该实现的方法或者属性。接口规定了类或者对象必须实现的一组方…

    JavaScript 2023年5月27日
    00
  • JavaScript 精粹读书笔记(1,2)

    JavaScript 精粹读书笔记(1,2)攻略 什么是《JavaScript 精粹》? 《JavaScript 精粹》是由Douglas Crockford所著的一本介绍JavaScript基础核心知识的书籍,书中详细的说明了JavaScript基础语法、对象、函数等重要知识,是学习JavaScript的经典著作。 简述第一章 第一章主要讲解了JavaSc…

    JavaScript 2023年5月18日
    00
  • 详解JS数组方法

    详解JavaScript数组方法 概述 JavaScript中数组(Array)是一种非常常用的数据结构,它们通常用于存储一系列的值。在JavaScript中,数组具有以下特点: 数组是一种有序的集合,每个元素都有一个索引。 数组的长度是可变的,可以随时添加或删除元素。 数组可以存储不同类型的值,例如数字、字符串、对象等。 JavaScript数组中常用的方…

    JavaScript 2023年5月18日
    00
  • 在JavaScript中处理时间之getHours()方法的使用

    在JavaScript中处理时间之getHours()方法的使用 getHours()是JavaScript的Date对象的方法,用于获取当前的小时数。这个方法返回一个0到23之间的整数,表示当前时间的小时数。 语法 date.getHours() 其中date是一个Date对象。 示例说明 示例1:获取当前时间的小时数 let now = new Date…

    JavaScript 2023年5月27日
    00
  • 一篇文章搞定echarts地图轮播高亮

    下面是详细讲解“一篇文章搞定echarts地图轮播高亮”的完整攻略: 1.准备工作 在开始操作之前,你需要准备以下工具和技能: 计算、理解经纬度坐标系并能熟练使用echarts中的地图组件 熟练使用javascript编程语言 确保已经完成了echarts库和其依赖库的安装 2. 地图轮播高亮思路 地图轮播高亮的核心思路,是通过定时器不断切换并高亮指定点的策…

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