防抖函数的兼容版本(vue3/vue2/javascript)
// vue 防抖,兼容vue3,vue2和普通js
// delay: 延迟时间(毫秒)
1.封装 debounce.js
export default class Debounce {
constructor(delay){
this.delay = delay ? delay : 500;
this.timeOut = null;
}
debounceEnd(){
return new Promise((resolve,reject)=>{
if(this.timeout){
clearTimeout(this.timeout)
}
this.timeout = setTimeout(()=>{
resolve('success');
},this.delay)
})
}
}
注:不需要把调用的函数作为参数传进去,仅仅通过使用promise来让我们的代码同步化,达到防抖的效果。
在vue3的setup中调用。通过new Debounce并传入一个延迟时间。获得一个实例,这个实例返回一个promise的成功回调,
如果当前页面有多个不同的操作需要防抖,可以通过new多个实例来分别处理。
在vue3中引入debounce.js
setup(){
const de = new Debounce(500);
async function handleInit(){
await de.debounceEnd()
//模拟发送请求
setTimeout(()=>{
.....
},100)
}
}
在vue2中
created(){
this.de = new Debounce(500)
},
methods:{
async handleClick(name){
await this.de.debounceEnd();
//500毫秒之后打印
}
}
在原生js上
let div = document.querySelector('#div');
const de = new Debounce(1000);
div.addEventListener('click',async()=>{
await de.debounceEnd();
})
//最新追加,在script setup组合式api中使用的防抖utils封装(2022、09.29)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现