节流、防抖函数(TypeScript)
创始人
2024-11-14 19:34:13
0

1、节流函数

节流(throttling)函数是一种在特定时间内只允许某个函数执行一次的技术。它可以用于限制函数执行的频率,例如在滚动、窗口调整大小、鼠标移动等高频事件中使用,避免函数被过多调用,导致性能问题。

定时器实现节流

/**  * @param func { T } => 节流的函数 * @param limit { number } => 节流时间(毫秒) */ function throttle void>(func: T, limit: number): T {   let inThrottle: boolean;    return function(this: ThisParameterType, ...args: Parameters) {     const context = this;      if (!inThrottle) {       func.apply(context, args);       inThrottle = true;       setTimeout(() => inThrottle = false, limit);     }   } as T; } 

时间戳实现节流

/**  * @param func { T } => 节流的函数 * @param limit { number } => 节流时间(毫秒) */ function throttle void>(func: T, limit: number): T {   let lastFunc: ReturnType;   let lastRan: number;    return function(this: ThisParameterType, ...args: Parameters) {     const context = this;      if (!lastRan) {       func.apply(context, args);       lastRan = Date.now();     } else {       clearTimeout(lastFunc);       lastFunc = setTimeout(() => {         if ((Date.now() - lastRan) >= limit) {           func.apply(context, args);           lastRan = Date.now();         }       }, limit - (Date.now() - lastRan));     }   } as T; } 

使用方法

// 需节流的函数 function func () { 	console.log("123123123......") } window.addEventListener('scroll', throttle(func, 1000)); 


2、防抖函数

防抖(debounce)函数是一种在事件触发后,等待一段时间,如果在等待期间事件再次被触发,则重新开始计时,直到等待时间结束才执行函数。这可以避免在短时间内多次触发同一个事件时多次执行相应的处理函数。

/**  * @param func { T } => 防抖的函数 * @param wait { number } => 防抖时间(毫秒) */ function debounce any>(func: T, wait: number): T {   let timeout: ReturnType;    return function(this: ThisParameterType, ...args: Parameters) {     const context = this;      clearTimeout(timeout);     timeout = setTimeout(() => func.apply(context, args), wait);   } as T; } 

使用方法

// 防抖函数 const func = debounce(() => { 	console.log("123123123......") }, 1000)  

相关内容

热门资讯

安卓系统怎么设壁纸桌面,轻松设... 亲爱的手机控们,你是不是也和我一样,对手机壁纸和桌面布局情有独钟?想要让你的安卓手机焕然一新,个性化...
安卓系统6.0怎么root教程... 亲爱的安卓用户们,你是否曾梦想过让你的手机拥有超能力?没错,我说的就是root!今天,就让我带你一步...
安卓2.2系统当贝市场,体验升... 你有没有想过,那些老旧的安卓设备,虽然已经不再流行,但它们在某个角落里,可能还在默默无闻地发挥着余热...
安卓14系统为啥卡顿,探究性能... 最近是不是发现你的安卓手机有点儿不给力了?打开应用慢吞吞的,滑动页面卡得像老牛拉车,这可真是让人头疼...
采集无锡安卓系统的公司,技术驱... 你有没有想过,在这个科技飞速发展的时代,手机操作系统的重要性简直不言而喻?而在中国,有一个城市,它的...
安卓新系统有问题,揭秘常见故障... 最近你的安卓手机是不是也遇到了点小麻烦?别急,让我来给你细细道来,看看这个新系统到底有哪些让人头疼的...
u盘安卓随身系统,U盘随身携带... 你有没有想过,把安卓系统随身携带,随时随地都能用上?没错,今天就要给你揭秘一个神奇的小玩意——u盘安...
安卓手机有俩系统吗,体验双重魅... 你有没有发现,安卓手机的世界里,好像藏着两个神秘的小秘密呢?没错,就是那个让人又爱又恨的安卓系统。今...
安卓系统恢复怎么搞,轻松应对系... 手机突然卡壳了,系统崩溃了,是不是瞬间感觉整个人都不好了?别慌,今天就来教你一招,让你的安卓手机重获...
windows和安卓系统的关系... 你有没有想过,为什么你的手机和电脑有时候会像好朋友一样,互相配合得天衣无缝?其实,这背后有一个大大的...
安卓11怎么降级系统,轻松还原... 你有没有发现,安卓11系统虽然功能强大,但有时候也会有点小闹心呢?比如,某些应用不支持,或者系统运行...
正版授权!游戏推荐斗牛房卡出售... 今 日消息,天蝎大厅房卡添加微信33549083 苹果今日发布了 iOS 16.1 正式版更新,简单...
推荐一款!金花房卡批发女娲大厅... 女娲大厅房卡更多详情添加微:33549083、 2、在商城页面中选择房卡选项。 3、根...
安卓系统误删无法开机,紧急修复... 手机里的照片、联系人、重要文件,说没就没了!最近,身边的朋友纷纷向我抱怨,他们的安卓手机因为误删数据...
玩家攻略,牛牛充值房卡新大圣/... 玩家攻略,牛牛充值房卡新大圣/新道游/微信链接房卡购买渠道新大圣/新道游是一款非常受欢迎的游戏,咨询...
一分钟了解!牛牛房卡出售红桃众... 红桃众娱是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:【3329006910】或QQ:332900...
IA解析/金花房卡批发玄灵大厅... IA解析/金花房卡批发玄灵大厅/微信链接房卡最低价格Sa9Ix苹果iPhone 17手机即将进入量产...
我来教你/牛牛房卡代理新518... 新518互娱房卡更多详情添加微:33549083、 2、在商城页面中选择房卡选项。 3...
正规平台有哪些,金花房卡代理零... 微信游戏中心:九天大厅房卡在哪里买打开微信,添加客服微信【88355042】,进入游戏中心或相关小程...
荣耀magic是安卓系统吗,探... 你有没有听说过荣耀Magic这款手机?最近它可是手机圈里的热门话题呢!很多人都在问,荣耀Magic是...