📜  Lodash _.throttle() 方法(1)

📅  最后修改于: 2023-12-03 15:02:47.206000             🧑  作者: Mango

Lodash _.throttle() 方法

_.throttle() 方法是 Lodash 库中常用的一个函数,它可以控制一个连续触发的事件在一定时间间隔内只触发一次。这个方法对于节流高频率触发的事件非常有用,比如监测 window 的 scroll 事件或 resize 事件,一般都是使用 _.throttle() 方法来优化性能。

语法
_.throttle(func, [wait=0], [options={}])

参数说明:

  • func :要被节流的函数。
  • wait :时间毫秒数,每 wait 毫秒才能触发一次 func
  • options :配置项对象,可选。
返回值

返回值是一个节流后的新函数。

使用示例

使用 _.throttle() 方法来限制滚动事件处理函数的调用速率:

import _ from 'lodash';

function handleScrollEvent() {
  console.log('Handling scroll.');
}

const throttledHandleScrollEvent = _.throttle(handleScrollEvent, 1000);

window.addEventListener('scroll', throttledHandleScrollEvent);

上面的代码中,handleScrollEvent 函数每隔 1000ms 才会由 throttledHandleScrollEvent 函数调用一次。

如果你希望在滚动到页面底部时执行一些操作,可以使用如下的改进版代码:

import _ from 'lodash';

function handleScrollEvent() {
  const atBottom = window.innerHeight + window.pageYOffset === document.body.offsetHeight;
  if (atBottom) {
    console.log('Scroll to the bottom of the page.');
  }
}

const throttledHandleScrollEvent = _.throttle(handleScrollEvent, 1000);

window.addEventListener('scroll', throttledHandleScrollEvent);

这样,当页面滚动到底部时,handleScrollEvent 函数才会被调用。

options 配置项

_.throttle() 方法的第三个参数 options 是一个可选的配置项对象,包含两个属性:

  • leading :默认值为 true,意为:第一次触发 func 不会被节流,第二次才会开始节流。如果设置为 false,则第一次触发 func 会被节流。
  • trailing :默认值为 true,意为:在最后一次节流执行完后,不会有更多的 func 被触发。如果设置为 false,则最后一次的 func 会被调用。

通过设置 options 对象的属性,你可以调整节流函数的行为:

import _ from 'lodash';

function handleScrollEvent() {
  console.log('Handling scroll.');
}

/**
 * 在节流之前执行第一次 handleScrollEvent()。
 * 如果不设置 leading: true 这个选项,那么会在滚动停止后等待 1000ms 才会调用一次 handleScrollEvent()。
 */
const throttledHandleScrollEvent = _.throttle(handleScrollEvent, 1000, { leading: true });

window.addEventListener('scroll', throttledHandleScrollEvent);

更多选项详细信息可查看官方文档:https://lodash.com/docs/4.17.15#throttle

总结

_.throttle() 方法可以防止高频率触发的事件造成性能瓶颈,使得长时间运行的事件处理程序节能省电。你可以通过更改节流函数的行为,控制触发 func 的速率,从而达到更好的性能优化效果。