vue中使用防抖函数

公司有个需求需要获取到表格内的偏移量,然后跳转出去后返回回来还要回到原来的位置。如果只是普通的做法就是在mounted添加一个监听事件就行

   mounted() {
      let element = this.$refs.plTable;
      element.$el.addEventListener("scroll", this.handleScroll, true);
    },
    activated() {
      setTimeout(() => {
        this.$nextTick(() => {
          console.log(123);
          let element = this.$refs.plTable.$el;
          const tableBodyDom = element.querySelector('.el-table__body');
          console.log(tableBodyDom);
          tableBodyDom.parentNode.scrollTop = sessionStorage.getItem('scrollTop');
          console.log(sessionStorage.getItem('scrollTop'));
        });
      }, 10);
    },
   methods:{
    handleScroll(e){
        console.log(e);
        let element = this.$refs.plTable.$el;
        let parentNode = e[0].srcElement;
        const tableBodyDom = element.querySelector('.el-table__body');
        console.log('3-----------', tableBodyDom.offsetHeight); // 文档流的总高度;
        console.log("scroll:  ", parentNode.offsetHeight); // 当前DIV窗口的高度;
        console.log("scroll top:  " + parentNode.scrollTop + "px"); // 当前DIV滚动条距离顶部的高度;
    //缓存 parentNode.scrollTop
} }

  

优化方案:加入防抖函数,可以有效的减轻代码压力;

/*函数防抖*/
export function debounce(fn, interval) {
  var timer;
  var gapTime = interval || 100;//间隔时间,如果interval不传,则默认1000ms
  return function() {
    clearTimeout(timer);
    var context = this;
    var args = arguments;//保存此处的arguments,因为setTimeout是全局的,arguments不是防抖函数需要的。
    timer = setTimeout(function() {
      fn.call(context,args);
    }, gapTime);
  };
}

  

加入防抖函数后;

import { debounce } from '@/common/js/utils.js';

      // 监听table组件滚动的高度
      handleScroll: debounce(function(e) {
        let element = this.$refs.plTable.$el;
        let parentNode = e[0].srcElement;
        const tableBodyDom = element.querySelector('.el-table__body');
        console.log(tableBodyDom.parentNode.scrollTop);
        console.log(tableBodyDom.parentNode.offsetTop);
        console.log('3-----------', tableBodyDom.offsetHeight); // 文档流的总高度;
        console.log("scroll:  ", parentNode.offsetHeight); // 当前DIV窗口的高度;
        console.log("scroll top:  " + parentNode.scrollTop + "px"); // 当前DIV滚动条距离顶部的高度;
        // this.scrollTop = parentNode.scrollTop;
        sessionStorage.setItem('scrollTop', parentNode.scrollTop);
      }),

  

 

posted @ 2021-07-23 16:56  凉拌  阅读(1587)  评论(0)    收藏  举报