JS问题:项目中如何区分使用防抖或节流?( 二 )

节流代码实例如下:
// 节流:鼠标移动在控制台打印坐标// fn(3000, handlePrint)function fn(delay, behavior) {var timer = null;return function (val) {if (!timer) {timer = setTimeout(function () {//调用handlePrint函数behavior(val);timer = null;}, delay);}};}function handlePrint(val) {console.log(val, "我是鼠标坐标");}//调用fn把1000和handlePrint这个函数传进去var handle = fn(3000, handlePrint);document.addEventListener("mousemove", function (e) {handle(e.offsetX);});只是看看原理,差不多了解即可,不要太纠结,项目中肯定不会这么使用,不然会被喷的 。
Vue等真实项目中,往往都会调用第三方库的函数,具体内容见第三部分 。
三、问题详解1、常用的防抖节流函数库整理流行的独立JAVAScript 库:

  • Lodash (https://lodash.com/):Lodash 是一个功能强大的 JavaScript 实用工具库,提供了丰富的工具函数,包括 debounce 和 throttle 。您可以使用 Lodash 中的 debounce 和 throttle 函数来实现相应的功能 。
  • Underscore.js (https://underscorejs.org/):Underscore.js 是另一个流行的 JavaScript 实用工具库,类似于 Lodash,也提供了 debounce 和 throttle 函数,供您使用 。
  • RxJS (https://rxjs.dev/):RxJS 是一个响应式编程库,它提供了丰富的操作符和工具函数,包括用于实现防抖和节流的操作符 。您可以使用 RxJS 中的 debounceTime 和 throttleTime 操作符来实现相应的功能 。
  • Async (https://caolan.Github.io/async/):Async 是一个流程控制库,提供了多种异步操作的工具函数 。它也包含了 debounce 和 throttle 函数的实现,供您使用 。
  • Trottle-Debounce (https://github.com/niksy/throttle-debounce):Trottle-Debounce 是一个提供了防抖和节流函数的 JavaScript 库,它可以用于任何 JavaScript 应用程序,不依赖于特定的框架 。
特定于框架的JavaScript 库:
  • VueUse (https://vueuse.org/):VueUse 是一个提供常用 Vue.js 自定义函数的库 , 其中包括了防抖和节流函数的实现 。在 VueUse 中,您可以使用 useDebounce 和 useThrottle 这两个自定义函数来实现防抖和节流功能 。
import { useDebounce, useThrottle } from '@vueuse/core';// 防抖// 在值变化后延迟500毫秒触发const debouncedValue = https://www.isolves.com/it/cxkf/yy/js/2023-12-21/useDebounce(value, 500); // 节流// 将函数封装为节流函数 , 每300毫秒触发一次const throttledFunction = useThrottle(myFunction, 300); // 在 Vue 组件中使用防抖和节流export default {setup() {const debouncedValue = useDebounce(value, 500);const throttledFunction = useThrottle(myFunction, 300);},}
  • React-use (https://github.com/streamich/react-use):React-use 是一个提供多种自定义 React hooks 的库,其中包括了 useDebounce 和 useThrottle 。您可以使用 React-use 中的这些 hooks 在 React 组件中实现防抖和节流功能 。




推荐阅读