应用场景
当事件触发非常频繁时,且每一次触发,回调函数都要去执行,如果时间很短,而回调函数内部有计算,那么很可能出现浏览器卡顿现象,用户行为过快,浏览器反应不过来,这时候就需要使用防抖和节流。
防抖
前面的所有触发都被取消,最后一次执行在规定时间之后才会触发,也就是说如果连续快速的触发,最终只会执行一次。所以,我们可以借助lodash插件来实现。使用场景:如input框,我们更希望的是当文字全部输入完后再执行相应函数。
Lodash 是一个一致性、模块化、高性能的 JavaScript 实用工具库。里面封装函数的防抖与节流的业务(闭包+延迟器)
- 下载:附上官网(https://www.lodashjs.com/)
$ npm i -g npm
$ npm i --save lodash
- 引入lodash:lodash的全部功能引入(但是我们一般最好是按需引入)
<script src="lodash.js"></script>
- lodash函数库对外暴露_函数;
- input框防抖演示:
let input =document.querySelector('input')
let result=_.debounce (function(){
console.log('在一秒后ajax发请求')
},1000)
result();
节流
在规定的间隔时间范围内不会重复触发回调,只有大于这个时间间隔才会触发回调,把频繁触发变为少量触发。
使用_.throttle函数。用法:
_.throttle(func, [wait=0], [options=])
1.按需引入,它直接是一个函数,且默认暴露(就不用加{ }了)
import throttle from 'lodash/throttle';
2.应用
changeIndex:throttle(function (index) {
this.currentIndex=index
},50),
3.注意
别用箭头函数,因为可能会出现上下文this的问题。
(箭头函数没有自己的this,它的this是继承而来,默认指向在定义它时所处的对象,
- 这句话摘自博客https://blog.youkuaiyun.com/xu4321083/article/details/79753800
)