📅  最后修改于: 2023-12-03 15:02:47.206000             🧑  作者: Mango
_.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
函数才会被调用。
_.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
的速率,从而达到更好的性能优化效果。