防抖函数debounce/节流throttle
对于refresh非常频繁的问题, 进行防抖操作
防抖函数与节流起作用的过程
函数防抖
,这里的抖动就是执行的意思,而一般的抖动都是持续的,多次的。假设函数持续多次执行,我们希望让它冷静下来再执行。也就是当持续触发事件的时候,函数是完全不执行的,等最后一次触发结束的一段时间之后,再去执行。
1. 持续触发不执行
2. 不触发的一段时间之后再执行
节流
的意思是让函数有节制地执行,而不是毫无节制的触发一次就执行一次。什么叫有节制呢?就是在一段时间内,只执行一次。
1. 持续触发并不会执行多次
2. 到一定时间再去执行
实例
- 如果我们直接执行refresh, 那么refresh函数会被执行很多次.
- 可以将refresh函数传入到debounce函数中, 生成一个新的函数.
- 之后在调用非常频繁的时候, 就使用新生成的函数.
- 而新生成的函数, 并不会非常频繁的调用, 如果下一次执行来的非常快, 那么会将上一次取消掉.(即,延迟时间内的函数不会执行)
防抖通俗来说就是:在执行后的X秒内,如果还有操作就取消上一次操作,直到X秒没有操作就提交返回。
代码如下:
debounce(func, delay) {
let timer = null
return function (...args) {
if (timer) clearTimeout(timer)
timer = setTimeout(() => { //timer是闭包的参数
func.apply(this, args)
}, delay)
}
}
//调用
this.debounce(this.$refs.scroll.refresh,500)
参数一:func是传入的需要做防抖处理的函数本身
参数二:dela是表示等待时间
setTimeout是异步函数
就是同步优先,异步靠边,回调垫底。setTimeout里面的异步函数是在下一次事件循环时候才会执行。
防抖和节流的区别
防抖是将多次执行变为最后一次执行,
节流是将多次执行变为每隔一段时间执行
实现函数节流我们主要有两种方法:时间戳和定时器
Comments | NOTHING
Warning: Undefined variable $return_smiles in /www/wwwroot/blog.moonlet.cn/wp-content/themes/Sakura/functions.php on line 1078
Warning: Undefined variable $robot_comments in /www/wwwroot/blog.moonlet.cn/wp-content/themes/Sakura/comments.php on line 97