throttle(节流)和debounce(防抖)
2024-10-18 20:21:24
防抖和节流都是用来控制频繁调用的问题,但是这两种的应用场景是有区别的。
throttle(节流)
有一个调用周期,在一个很长的时间里分为多段,每一段执行一次。例如onscroll,resize,500ms执行一次
// 使用时间差
function throttle (fun, wait) {
let previous = 0
return function (...args) {
let now = Date.now()
let context = this
if (now - previous > wait) {
fun.apply(context, args)
previous = now
}
}
}
// 使用定时器
function throttle1 (func, wait) {
let timeout
return function (...args) {
let context = this
if (!timeout) {
timeout = setTimeout(function () {
timeout = null
func.apply(context, args)
}, wait)
}
}
}
debounce(防抖)
在一定时间内不调用,只调用一次。例如input事件,停止输入500ms之后再执行。
function debounce (fun, delay) {
let time = null
return function (...args) {
let ctx = this
clearTimeout(time)
time = setTimeout(function () {
fun.apply(ctx, args)
time = null
}, delay)
}
}
最新文章
- MySQL索引原理及慢查询优化
- Quartz.net配置文件实例及cron表达式详解
- [转]MySQL关键性能监控(QPS/TPS)
- JAVA jdbc获取数据库连接
- javascrpt 继承
- Java魔法类:sun.misc.Unsafe
- CentOS6.5下docker的安装及遇到的问题和简单使用
- ASP.NET MVC全局观
- Android源码及SDK国内镜像下载
- mybatis if test加筛选条件
- TypeScript--变量及类型的那些事儿
- fastjson 的使用总结
- 读spring源码(三)-ClassPathXmlApplicationContext-getBean
- css实现超出文本省略号的两个方法
- 简易解说拉格朗日对偶(Lagrange duality)
- gevent模块学习(三)
- mybatis缓存的设计
- Executors创建的4种线程池的使用
- ThreadPoolExecutor 线程池的源码解析
- python threading模块使用 以及python多线程操作的实践(使用Queue队列模块)