Vue3中使用防抖Debounce和节流(Throttle)自定义函数
创作时间:
作者:
@小白创作中心
Vue3中使用防抖Debounce和节流(Throttle)自定义函数
引用
CSDN
1.
https://blog.csdn.net/weixin_40003755/article/details/137594368
本文虽然是半年前的文章,但技术内容仍然具有很高的参考价值。
防抖(Debounce)
防抖是指在一定时间内只执行一次函数,如果在这段时间内再次触发,那么会重新计算执行时间。常用于如输入框实时搜索以及点赞评分等场景,避免短时间内多次触发事件导致性能问题,(请记住防抖是最后一次提交)
例如简单的点击按钮,设置一定时间在执行此函数
<p>
{{ sum }}
</p>
<van-button type="primary" size="small" @click="handleSum">
防抖
</van-button>
调用方法一:
<script setup>
import { debounce } from '@/utils/debounce.js'
//方法一
const sum = ref(100)
const handleSum = debounce(() => {
addSum()
}, 5000,false)
const addSum = () => {
sum.value++
}
</script>
把以下代码放入debounce.js文件中
// 防抖函数
function debounce(func, wait, immediate) {
console.log('防抖');
let timeout; // 定义一个计时器变量,用于延迟执行函数
return function (...args) { // 返回一个包装后的函数
const context = this; // 保存函数执行上下文对象
const later = function () { // 定义延迟执行的函数
timeout = null; // 清空计时器变量
if (!immediate) func.apply(context, args); // 若非立即执行,则调用待防抖函数
};
const callNow = immediate && !timeout; // 是否立即调用函数的条件
clearTimeout(timeout); // 清空计时器
timeout = setTimeout(later, wait); // 创建新的计时器,延迟执行函数
if (callNow) func.apply(context, args); // 如果满足立即调用条件,则立即执行函数
};
}
export {
debounce,
}
一个简单的防抖就完成了
节流(Throttle)
节流是指在一定时间内只允许函数执行一次,无论触发多少次事件,函数都只在规定的时间间隔内执行一次。常用于如滚动事件、提交保存等,确保某些操作不会过于频繁。(请记住是第一时间调用在规定时间不会调用)
<p>
{{ num }}
</p>
<van-button type="primary" size="small" @click="handleSim">
节流
</van-button>
调用方法二:
<script setup>
import { throttle } from '@/utils/throttle.js'
//方法二
const num = ref(20)
const addNum = () => {
num.value++
}
const handleSim = throttle(addNum, 5000)
</script>
把以下代码放入throttle.js文件中
// 节流函数
function throttle(func, wait) {
let timeout; // 定义一个计时器变量,用于限制函数调用频率
return function (...args) { // 返回一个包装后的函数
const context = this; // 保存函数执行上下文对象
if (!timeout) { // 如果计时器不存在
func.apply(context, args); // 执行函数
timeout = setTimeout(() => {
timeout = null; // 清空计时器变量
}, wait); // 创建计时器,在指定时间后重置计时器变量
}
};
}
export {
throttle,
}
简单的节流完成了。
防抖和节流调用方法是一样的,只不过写法不一样,个人喜欢那种写那种
热门推荐
情感的共鸣:通过共情阅读增进亲子间的理解和沟通
电子驾照申请流程揭秘及使用注意事项详解
手足口病:识别、预防与家庭护理指南
智造注入新动能 “制造业大市”佛山如何度过转型阵痛期?
3DHM:单张图片生成任意视频动作的3D人体动作生成框架
什么是跑车设计优化
顶出一个春天:《创作春天意象文章的技巧》
双氯芬酸钠缓释片能长期吃吗?专家解读用药风险与替代方案
离婚时一方隐藏夫妻共同财产?法院:可少分或不分财产
人才盘点可以从哪些方面盘点?如何识别和评估企业人才?
权力斗争下的牺牲品:秦桧与岳飞的悲剧冲突
时间针灸——飞腾八法
如何选择一款太阳眼镜?一文科普明白偏光、变色、款式、脸型,附产品推荐
吃哪种食物最能“抗饿”?这4种强饱腹感食物,能让你瘦得更快
五v五竞技游戏大盘点:热门对决一览
古代玉戒指:揭秘玉戒指的神秘历史与价值
教龄认定的规定
如何在考试中保持专注?
微积分:探索变化与累积的美丽数学之旅
制作干花的五种方法及详细步骤
普洱茶的年份怎么算?年份含义、出厂日期与价格关系
低GI食物有哪些?秒懂升糖指數(GI)
王莽:真穿越者还是超前改革家?
自动驾驶汽车通讯协议:I2C(IIC)总线通讯技术详解
数据治理:跨越多行业的数据互联互通与协同推进新篇章
近年常见的8种海报设计风格
去澳洲留学交学费的方式和注意事项
银行企业账户开户所需资料详解
古代壮行酒与摔碗的传统:一种象征性的告别仪式
NVIDIA低延迟模式完全指南:让游戏体验更流畅