JavaScript 节流函数 Throttle 详解

yizhihongxing

JavaScript 节流函数 Throttle 详解

什么是节流函数

函数节流是一种通过控制函数执行频率的技术,可以让我们控制一个函数在一段时间时间内执行多少次。它可以解决一些频繁触发事件的问题,例如页面滚动的触发事件。

为何需要使用节流函数

在一些需要频繁执行的L函数中,比如页面滑动事件,如果不做任何优化处理,就会导致多次重复计算、频繁造成 DOM 渲染,影响页面性能,甚至可能会导致浏览器挂掉。这时,就可以使用函数节流来解决这些问题,避免重复执行。

实现节流函数

我们可以通过 setTimeout 和 Date 来实现节流函数,简单的实现代码如下:

 function throttle(fn, delay) {
     let flag = true;
     return function() {
         if (flag) {
             flag = false;
             setTimeout(() => {
                 fn();
                 flag = true;
             }, delay);
         }
     }
 }

以上代码中,throttle 函数具有两个参数,第一个是需要被执行的函数,第二个是节流的时间(单位为毫秒)。flag 变量初始值为 true,代表第一次调用后需要等待才能再次调用,setTimeout 用来控制节流时间。

节流函数的应用场景

由于函数节流可以让我们减少函数的执行次数,优化了代码的性能,因此在一些需要频繁执行的代码中特别有用,比如:

1. 监听页面滚动事件

在监听页面滚动事件时,很容易就会因为滚动距离的微小变化而频繁触发函数。而这个时候,函数节流就可以很好地解决这个问题。

举个例子:

    window.addEventListener('scroll', throttle(handleScroll, 200));

    function handleScroll() {
      console.log('scroll event');
    }

以上代码中,我们将 handleScroll 函数通过 throttle 函数传入给监听器,控制了监听事件执行的时间间隔为 200ms。

2. 搜索框实时显示搜索结果

当用户在搜索框中输入关键词时,我们希望搜索结果能够实时显示出来,而这个时候函数节流也可以大显身手。

    const inputEle = document.querySelector('#search-input');
    const searchEle = document.querySelector('#search-list');
    const searchThrottle = throttle(searchInput, 200);

    inputEle.addEventListener('input', searchThrottle);

    function searchInput(event) {
      // 获取输入框文本内容,并根据实时的输入值查询相关数据
      const value = event.target.value;
      console.log(`searching for ${value}`);
      // 省略其他查询操作和页面展现
    }

以上代码中,searchInput 函数使用节流实现了在用户输入搜索关键词时,将搜索结果实时地展现在页面上。由于节流时间被设置为了 200ms,搜索结果的实时展现不会让页面变得过于卡顿,同时也减少了请求后端服务的压力。

总结

函数节流是一种常用的优化js代码性能的技巧,在一些频繁触发函数执行的场景中非常实用。本文详细介绍了函数节流的实现、应用场景和使用姿势,希望能帮助大家更好的使用js代码。

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

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

相关文章

  • uniapp跨页面传值uni.$emit和uni.$on的使用及踩坑实战

    uniapp 跨页面传值:uni.$emit 和 uni.$on 的使用 在一个完整的 uniapp 应用程序中,存在着多个页面组成的应用。有时候我们需要在不同的页面之间传递数据,这时候就要用到 uniapp 提供的跨页面传值方式 —— uni.$emit 和 uni.$on。 1. uni.$emit 和 uni.$on 概述 uni.$emit 和 un…

    JavaScript 2023年6月11日
    00
  • jquery实现初次打开有动画效果的网页TAB切换代码

    下面是详细的攻略: 需求分析 需要用jquery实现一个带有切换动画效果的网页TAB切换功能。具体要求如下: 初次加载页面时,选中第一个TAB页面,其他TAB页面隐藏。 点击某个TAB按钮时,该按钮对应的TAB页面显示,并向左边滑动展示。 再次点击该TAB按钮时,该页面向右边滑动隐藏。 代码实现 实现思路: 通过jquery选择器找到所有的TAB按钮和页面元…

    JavaScript 2023年6月10日
    00
  • NodeJS有难度的面试题(能答对几个)

    下面我会详细讲解一下 “NodeJS有难度的面试题(能答对几个)” 的完整攻略。 1. Node.js的基础知识 在面试过程中,面试官通常会问到一些基础的 Node.js 知识,例如: Node.js 是什么? npm 是什么? 有什么用? 如何在 Node.js 中使用第三方模块? 什么是模块? 如何定义并导入模块? 针对这些问题,你需要先通过自学文档以及…

    JavaScript 2023年5月28日
    00
  • JavaScript实现页面无缝滚动效果

    下面是我总结的“JavaScript实现页面无缝滚动效果”的完整攻略。 前置知识 在学习“JavaScript实现页面无缝滚动效果”之前,需要先了解一些基础知识,包括: HTML基础知识:HTML文档的结构、基本标签的使用等。 CSS基础知识:CSS样式基础语法、布局、盒模型等。 JavaScript基础知识:变量、函数、循环、条件语句等。 实现思路 在实现…

    JavaScript 2023年6月11日
    00
  • js自调用匿名函数的三种写法(推荐)

    下面是JS自调用匿名函数的三种写法攻略: 1. 包裹执行 最常见的自调用匿名函数就是包裹执行(也称为自调用函数表达式,IIFE)。这种写法在函数表达式后紧跟一个括号,表示调用这个函数。其主要目的是防止变量污染全局作用域。 标准写法: (function() { // 在这里编写你的代码 })(); 可以使用 arrow function (ES6+)简化写法…

    JavaScript 2023年5月27日
    00
  • JavaScript中数组flat方法的使用与实现方法

    下面是关于“JavaScript中数组flat方法的使用与实现方法”的详细攻略。 一、什么是数组flat方法 1.1 官方定义 Array.prototype.flat() 方法会按照一个可指定的深度递归遍历数组,并将所有元素与子数组中的元素合并为一个新数组返回。 1.2 使用场景 在处理多层嵌套的数组时,我们经常需要将数组压平成一维数组,可以使用flat方…

    JavaScript 2023年5月27日
    00
  • JavaScript几种形式的树结构菜单

    下面为大家详细讲解 JavaScript 几种形式的树结构菜单的完整攻略。 什么是树结构菜单 树结构菜单是一种常见的用于网站导航或者分类展示的组件。树结构菜单的特点是可以展开、收起某一层级的菜单,同时高亮显示当前选中的菜单项。在前端开发中,我们可以使用 JavaScript 来实现这种树状结构的菜单。 JavaScript 实现树结构菜单的基本思路 在使用 …

    JavaScript 2023年6月11日
    00
  • Javascript attachEvent传递参数的办法

    当使用Javascript的attachEvent来绑定事件时,我们希望能够给事件处理函数传递一些参数,但是attachEvent本身并不支持传递参数。下面介绍两种解决方法。 方法一:使用闭包 使用闭包是attachEvent传递参数的一种常用方法。首先,我们先定义一个函数来包装我们要执行的事件处理函数。在这个包装函数中,我们可以访问到需要传递的参数,并把这…

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