【Vue】vue使用节流与防抖注意点

防抖+节流作用

  • 防抖:
    • 作用:只运行最后一次调用
    • 例:2秒内调用了a函数100次。使用防抖后,第1-99次都不会调用a函数,只在第100次调用a函数
    • 用作领域:登录、注册

  • 节流:
    • 作用:减少触发次数
    • 例:监听浏览器滚动。一秒内触发10次监听函数,假如使用节流后,若节流延时设为为0.5秒,那么1秒内只触发2次监听函数。

代码

scr/utils/tools.js

// 防抖函数| f 要执行的函数 | deley 延时(毫秒),默认100 | firstRun 第一次是否执行 true就是执行,默认false, // // // // // // // // // // // // // 
function debounce(f, deley = 100, firstRun = false) {
    let time666
    // 第一次是否执行
    if (firstRun === true) f();

    return (_, ...args) => {
        clearTimeout(time666)
        time666 = setTimeout(__ => f.apply(_, args), deley)
    }
};

// 节流 f-函数 deley-延时
function throttle(f, deley = 500) {
    let time = null; 

    return (_, ...args) => {
        if (time !== null) return

        time = setTimeout(() => {
            f.apply(_, args)
            time = null
        }, deley);
    }
}
 
export {
    debounce, 
    throttle
}

需求+调用防抖

需求

  1. 频繁点击按钮时,只执行最后一次点击

错误调用

<template>
    <button @click="florCard.florClk1">调用1</button>
 	<button @click="debounce(lorCard.florClk2,1200)">调用2</button> 
	<button @click="debounce(lorCard.florClk3,1200)">调用3</button> 
</template>

<script setup> 
import { debounce } from '@/utils/tools'

const florCard = {  
	//错误 1
     florClk1() {
        debounce(() => console.log(1))
   	 },
   	 
     //错误 2
    florClk2: function() {
     	 console.log(1);
    },
	
	// 错误 3
	  florClk3() {
          console.log(1);
     },
}
</script>

正确调用

必须定义一个变量接收防抖/节流返回的函数,如下防抖 常量

src/views/homeView.vue

<template>
    <button @click="防抖(1, 2, 3)">按钮1111</button> 
</template>

<script setup>
import { debounce } from '@/utils/tools'

const a = _ => console.log(_)

/** 
 * a - 调用的函数
 * 定义一个变量、变量存储防抖函数的返回值
 * 注:防抖函数返回的是一个函数,所以,防抖常量存储的是个函数
 */
const 防抖 = debounce(a,1000)  
</script>

注意点

防抖+节流注意点
vue事件中使用防抖/节流时,需调用防抖/节流返回的函数 。并非直接调用debounce、throttle 函数
节流+防抖原理是返回一个函数,并调用返回的这个函数,达到防抖+节流效果
  • 上面错误的调用方法,
    1. 因为调用一个普通函数,再调用防抖/节流,此时防抖/节流返回一个函数,但未调用防抖/节流返回的函数,没有达到防抖/节流效果
    2. 在防抖、节流函数后面加个小括号,是调用到防抖、节流了。但,每次点击按钮时都会不停触发防抖、节流,最终也没有达到防抖、节流效果。

End


2023/3/12 辑


2023/3/15 一改


2023/4/21 19:55 2改

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值