JS防抖节流函数的实现与使用场景

JS防抖节流函数的实现与使用场景

什么是JS防抖和节流?

  • 防抖:是指在一段时间内,多次触发同一事件,只执行一次函数。即当一连串的操作被触发时,只有最后一个操作被执行而前面的操作都被忽略了。
  • 节流:是指在一段时间内,多次触发同一事件,只执行一次函数。即在规定的时间内,重复触发只会响应一次,并阻止事件触发后一段时间内的操作。

防抖函数实现及使用场景

实现

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

防抖的原理是使用定时器,在规定时间内只执行一次函数,如果在规定时间内被多次调用,则会清除之前的计时器,重新开始计时。

使用场景

输入框实时搜索是常用的防抖场景。还有一些需要频繁操作DOM的事件,如窗口的调整、滚动条的移动等操作,为了防止频繁操作导致页面卡顿,可以使用防抖函数来控制事件的执行。

// 输入框实时搜索
const input = document.querySelector('#input')
input.addEventListener('input', debounce(function() {
  // 搜索相关逻辑
}, 500))

节流函数实现及使用场景

实现

Throttle

function throttle(fn, delay) {
  let lastTime = 0
  return function () {
    let now = Date.now()
    if (now - lastTime > delay) {
      fn.apply(this, arguments)
      lastTime = now
    }
  }
}

Throttle的原理是在规定时间内,防止函数无限制地执行,只有在规定时间之后才能触发下一次函数的执行。

Leading Throttle

function leadingThrottle(fn, delay) {
  let lastTime = 0, firstTime = true
  return function () {
    let now = Date.now()
    if (firstTime || (now - lastTime > delay)) {
      fn.apply(this, arguments)
      lastTime = now
      firstTime = false
    }
  }
}

Leading Throttle的特点是第一次调用立即执行,然后在规定时间内才能触发下一次函数执行。

Tailing Throttle

function trailingThrottle(fn, delay) {
  let lastTime = 0, timer = null
  return function () {
    let now = Date.now()
    let diff = now - lastTime
    if (diff >= delay) {
      clearTimeout(timer)
      timer = null
      lastTime = now
      fn.apply(this, arguments)
    } else if (!timer) {
      timer = setTimeout(() => {
        timer = null
        lastTime = Date.now()
        fn.apply(this, arguments)
      }, delay - diff)
    }
  }
}

Tailing Throttle和Leading Throttle不一样的地方在于,首次不会立即执行,而是在下一次执行的时候将上一次未执行的操作一起执行。

使用场景

在一些频繁触发的场景下使用节流函数能够减少函数执行的频率,从而提高页面性能。

// 窗口resize事件
window.addEventListener('resize', throttle(function() {
  // 处理DOM相关操作
}, 500))

在滚动时计算需要出现的元素数量时,使用Tailing Throttle能够在滚动结束时将所有需要出现的元素一起计算。

// 滚动时计算需要出现的元素数量
window.addEventListener('scroll', trailingThrottle(function() {
  // 计算需要出现的元素数量,并显示
}, 500))

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS防抖节流函数的实现与使用场景 - Python技术站

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

相关文章

  • js 数组克隆方法 小结

    以下是关于“js 数组克隆方法 小结”的完整攻略: 标准的数组克隆方式 在JavaScript中,有两种标准的数组克隆方式: 利用ES6的扩展运算符(…) const arr1 = [1, 2, 3]; const arr2 = […arr1]; console.log(arr1); // [1, 2, 3] console.log(arr2); /…

    JavaScript 2023年5月27日
    00
  • 一文教会你提高Javascript代码效率的技巧

    一文教会你提高JavaScript代码效率的技巧 介绍 本篇文章将会介绍一些提高JavaScript代码效率的技巧。如果您已经熟悉了JavaScript基础语法并开发过一些JavaScript应用,那么了解更多关于如何提高代码效率的方法应该是您进一步提升技能的重要步骤。 技巧一:避免不必要的循环 如果你在应用程序中使用循环语句,那么要尽可能避免在不必要的场景…

    JavaScript 2023年5月28日
    00
  • JS中的变量作用域(console版)

    下面我将为你详细介绍“JS中的变量作用域(console版)”的攻略。 什么是变量作用域? 在JS中,变量的作用范围被称为变量作用域。简单来说,就是定义一个变量后,这个变量能够被访问的范围。JS中有全局作用域和局部作用域。全局作用域指的是在整个JS文件中都能够访问的变量,而局部作用域则指的是在函数中定义的变量,在函数外面是无法访问到的。 如何判断变量作用域?…

    JavaScript 2023年5月28日
    00
  • js播放wav文件(源码)

    下面是使用JavaScript播放WAV文件的攻略及示例: 前置条件 播放WAV文件需要浏览器支持Web Audio API,因此在进行下一步操作的前提条件是您的浏览器支持Web Audio API。 步骤一:创建一个AudioContext对象 在使用Web Audio API播放声音之前,必须先创建一个AudioContext对象。代码如下: let c…

    JavaScript 2023年5月27日
    00
  • Dwr3.0纯注解(纯Java Code配置)配置与应用浅析二之前端调用后端

    Dwr是一个轻量级的远程调用框架,它可以帮助开发者在前端页面中方便地调用后端Java方法。在Dwr 3.0版本中,提供了完全基于注解的纯Java代码配置方式,这种方式相对于传统的XML配置方式更加简单、易用。 配置DwrServlet 首先,我们需要在web.xml文件中配置DwrServlet: <servlet> <servlet-na…

    JavaScript 2023年5月28日
    00
  • 微信小程序表单验证功能完整实例

    下面是关于“微信小程序表单验证功能完整实例”的详细攻略,包含了代码实现和示例说明。 1. 简介 在微信小程序开发过程中,我们经常需要使用表单来收集用户数据。为了保证数据的有效性和安全性,我们需要对表单数据进行验证。下面我们就来介绍一种微信小程序表单验证功能的完整实例。 2. 实现步骤 2.1 HTML 结构 首先,我们需要在 HTML 中添加表单元素,并设置…

    JavaScript 2023年6月10日
    00
  • 带你了解session和cookie作用原理区别和用法

    下面是带你了解session和cookie作用原理区别和用法的完整攻略。 什么是Session和Cookie? Session和Cookie都是用于网站管理和储存状态的技术。其中,Session是在服务器端管理状态,而Cookie是在客户端管理状态。 Cookie Cookie是一小段文本信息,存储在用户的计算机中。当用户访问网站时,网站服务器会将Cooki…

    JavaScript 2023年6月11日
    00
  • js判断文件类型大小并给出提示的实现方法

    下面就是“js判断文件类型大小并给出提示的实现方法”的完整攻略: 思路概述 获取文件类型 获取文件大小 判断文件类型和大小,给出提示信息 获取文件类型 文件类型可以通过文件后缀名来判断。可以通过以下方法获取文件后缀名: // 传入文件名,返回文件后缀名 function getFileSuffix(fileName) { var index = fileNa…

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