本文共 1213 字,大约阅读时间需要 4 分钟。
throttle 应用场景:鼠标多次点击按钮进行操作,输入框频繁搜索内容等条件下,为节省资源使用节流。(单位时间内只触发一次)
debounce应用场景:滚动加载请求数据,window触发resize的时候,使用防抖函数可以让其只在最后触发一次。
节流(throttle)和防抖(debounce)的区别:函数防抖和函数节流都是防止某一时间频繁触发,防抖和节流原理却不一样。函数防抖是某一段时间内只执行一次,而函数节流是间隔时间执行。节流是在频繁操作的情况下按照给定的时间定时执行,防抖在频繁操作过程中会清楚上次的执行时间重新进行计算,从而只执行一次,类似于人进入电梯时电梯关门时间的处理。
vue文档中有提到debounce,但该在2.0已被属性被移除及处理,推荐lodash
示例:使用 lodash 的防抖函数 (debounce ),进行滚动加载数据的操作(当滚动条距离底部小于30px,请求)
import { debounce } from "lodash";export default { data() { return { tableData:[], isloading: true } }, methods: { getTableData(){ .....此处省略,页数加1,从后台请求table数据,合并,设置加载状态isloading为false }, scrollEvent: debounce(function(e) { //使用防抖函数在停止滚动时加载一次,而不是在滚动过程中多次加载 if (e instanceof Event && !this.isloading) { let el = e.target; let scHeight = el.scrollHeight, scTop = el.scrollTop, clHeight = el.clientHeight; if (scHeight - scTop - clHeight >= 20) { console.log("距离底部的高度", scHeight - scTop - clHeight); return; } else { this.getTableData(); } } }, 500), }}此处表格内容省略
相关资料了解更深的了解:
转载地址:http://xxurf.baihongyu.com/