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