Vue 节流(throttle)和防抖(debounce)

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://www.sohu.com/a/251913760_500651

 

你可能感兴趣的:(vue,防抖节流,debounce)