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);
      }),

  

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM