首页 > 其他分享 >el-table两个表尾合计行联动同步滚动条代码

el-table两个表尾合计行联动同步滚动条代码

时间:2023-11-13 11:37:59浏览次数:33  
标签:el 节流 weixin two scrollLeft 滚动条 jingdong table

效果图
我们先看一下效果图

思路
获取对应的两个表格设置滚动条的dom,并通过Element.scrollLeft去设置滚动的距离

官方文档:

滚动容器(审查元素即可得知):

完整代码
自己演示的话,直接复制粘贴即可,代码中包含注释

<template>
  <div class="kkk">
    <div class="myWrap">
      <el-table
        ref="one"
        :data="tableBody"
        border
        :header-cell-style="{
          background: '#FAFAFA',
          color: '#333333',
          fontWeight: 'bold',
          fontSize: '14px',
        }"
        show-summary
      >
        <el-table-column type="index" label="序号" width="60">
        </el-table-column>
        <el-table-column
          prop="bookType"
          label="人物隶属"
          width="100"
        ></el-table-column>
        <el-table-column prop="name" label="姓名" width="120"></el-table-column>
        <el-table-column prop="zhifubao" label="支付宝" width="160">
        </el-table-column>
        <el-table-column prop="weixin" label="微信" width="160">
        </el-table-column>
        <el-table-column prop="jingdong" label="京东" width="160">
        </el-table-column>
        <el-table-column prop="yunshanfu" label="云闪付" width="160">
        </el-table-column>
        <el-table-column prop="suning" label="苏宁" width="160">
        </el-table-column>
        <el-table-column prop="lakala" label="拉卡拉" width="160">
        </el-table-column>
      </el-table>
      <el-table
        ref="two"
        :data="tableBody2"
        border
        show-summary
        :show-header="false"
      >
        <el-table-column type="index" label="序号" width="60">
        </el-table-column>
        <el-table-column
          prop="bookType"
          label="业务类型"
          width="100"
        ></el-table-column>
        <el-table-column prop="name" label="姓名" width="120"></el-table-column>
        <el-table-column prop="zhifubao" label="支付宝" width="160">
        </el-table-column>
        <el-table-column prop="weixin" label="微信" width="160">
        </el-table-column>
        <el-table-column prop="jingdong" label="京东" width="160">
        </el-table-column>
        <el-table-column prop="yunshanfu" label="云闪付" width="160">
        </el-table-column>
        <el-table-column prop="suning" label="苏宁" width="160">
        </el-table-column>
        <el-table-column prop="lakala" label="拉卡拉" width="160">
        </el-table-column>
      </el-table>
    </div>
  </div>
</template>
<script>
// cnpm i lodash --save
import _ from "lodash";
export default {
  data() {
    return {
      tableBody: [
        {
          bookType: "西游记",
          name: "孙悟空",
          zhifubao: 1,
          weixin: 2,
          jingdong: 3,
          yunshanfu: 4,
          suning: 5,
          lakala: 6,
        },
        {
          bookType: "西游记",
          name: "猪八戒",
          zhifubao: 6,
          weixin: 5,
          jingdong: 4,
          yunshanfu: 3,
          suning: 2,
          lakala: 1,
        },
      ],
      tableBody2: [
        {
          bookType: "三国演义",
          name: "刘备",
          zhifubao: 2,
          weixin: 2,
          jingdong: 2,
          yunshanfu: 2,
          suning: 2,
          lakala: 2,
        },
        {
          bookType: "三国演义",
          name: "猪八戒",
          zhifubao: 3,
          weixin: 3,
          jingdong: 3,
          yunshanfu: 3,
          suning: 3,
          lakala: 3,
        },
      ],
    };
  },
  mounted() {
    // 1. 初始化的时候,设置横向滚动规则
    this.setScrollRule();
  },
  methods: {
    setScrollRule() {
      let that = this; // 存一份this便于取用
      this.one = this.$refs.one.bodyWrapper; // 获取带有滚动条的dom元素,注意饿了么UI的el-table的横向滚动条是设置在类名为
      this.two = this.$refs.two.bodyWrapper; // class="el-table__body-wrapper is-scrolling-left" 这个dom上。审查元素可知
      console.log("滚动条dom容器", this.one);
      // 2. 绑定滚动事件,顺带加上一个节流函数吧,也算是性能优化
      this.one.addEventListener(
        "scroll",
        _.throttle(
          function () {
            that.fn1(); // 85毫秒触发一次吧
          },
          85,
          {
            leading: true, //指定调用在节流开始前
            trailing: false, //指定调用在节流结束后,
          }
        )
      );
      // 同上...
      this.two.addEventListener(
        "scroll",
        _.throttle(
          function () {
            that.fn2();
          },
          85,
          {
            leading: true,
            trailing: false,
          }
        )
      );
    },
    // 3. 通过Element.scrollLeft属性 可以读取或设置元素滚动条到元素左边的距离
    fn1() {
      console.log("滚动条一 移动多少?", this.one.scrollLeft);
      this.two.scrollLeft = this.one.scrollLeft;
      /**
       * 加了节流函数以后,就会出现当我们滑动过快的时候,远小于定义节流时间所触发的间隔
       * 就会出现距离不准确问题,所以再加一个延时定时器重新更正(更新一下位置)
       * */
      setTimeout(() => {
        this.two.scrollLeft = this.one.scrollLeft; // api文档详情见mdn文档:https://developer.mozilla.org/zh-CN/docs/Web/API/Element/scrollLeft
      }, 120);
    },
    // 同上...
    fn2() {
      console.log("滚动条二 移动多少?", this.two.scrollLeft);
      this.one.scrollLeft = this.two.scrollLeft;
      setTimeout(() => {
        this.one.scrollLeft = this.two.scrollLeft;
      }, 120);
    },
  },
  beforeDestroy() {
    // 移除事件监听
    this.one.removeEventListener("scroll", this.fn1);
    this.one.removeEventListener("scroll", this.fn2);
  },
};
</script>

转自:https://zhuanlan.zhihu.com/p/512619348

标签:el,节流,weixin,two,scrollLeft,滚动条,jingdong,table
From: https://www.cnblogs.com/axingya/p/17828760.html

相关文章

  • A Latent Hidden Markov Model for Process Data读文献笔记
    【个人笔记】:笔记(ALatentHiddenMarkovModelforProcessData)\SummaryResponseprocessdatafromcomputer-basedproblem-solvingitemsdescriberespondents'problem-solvingprocessesassequencesofactions.Suchdataprovideavaluablesourcefor......
  • 分析Linux kernel exception-基础篇【转】
    转自:https://blog.csdn.net/ldinvicible/article/details/50911947转载自MTKFAQ:KE概念AndroidOS由3层组成,最底层是kernel,上面是nativebin/lib,最上层是java层: 任何软件都有可能发生异常,比如野指针,跑飞、死锁等等。异常发生在kernel层,我们就叫它为KE(kernelexception),同理,......
  • husky——The '.husky/pre-commit' hook was ignored because it's not set as execut
    前言系统:machint:The'.husky/pre-commit'hookwasignoredbecauseit'snotsetasexecutable.hint:Youcandisablethiswarningwith`gitconfigadvice.ignoredHookfalse`.hint:The'.husky/prepare-commit-msg'hookwasignoredbec......
  • 深入理解 LINQ 中的 SelectMany
    在LINQ(LanguageIntegratedQuery)中,SelectMany是一个强大的方法,用于处理集合中的嵌套结构。本文将深入探讨SelectMany的用法,以及在其两种形式中参数的含义。1.SelectMany的单参数形式IEnumerable<TResult>SelectMany<TSource,TResult>(thisIEnumerable<TSource>source......
  • 不会这5个Excel函数,别说你会做数据分析?
    当涉及数据分析时,Excel是一个非常有用的工具,而掌握一些核心函数将大大提高你在数据处理和分析方面的能力。以下是我对五个重要的Excel函数的详细介绍:1.VLOOKUP函数VLOOKUP函数是Excel中最常用的查找函数之一。它允许你在一个范围内搜索特定的数值,并返回该数值所在行的其他......
  • 为什么MySQL不建议使用delete删除数据?
    MySQL并不直接建议禁止使用DELETE语句删除数据,但是在某些情况下,使用DELETE可能会带来一些潜在的问题,特别是在大型数据库中。下面我将详细介绍为什么在某些情况下MySQL不建议过度使用DELETE语句来删除数据,并探讨其可能带来的影响。1.DELETE操作的影响DELETE语句用于从表中删除......
  • 最新版本ELFK-8.10部署实战
    一背景在现代软件系统中,日志是非常重要的组成部分。它们记录了系统的运行状态、错误消息、用户活动等信息。然而,当系统规模变大并且涉及多个组件时,日志管理变得非常复杂。传统的日志管理方法可能会面临一些挑战,包括集中化存储、检索和分析日志数据的困难。ELK是一套流行的开源工具......
  • Telnet测试端口的命令
    Telnet测试端口的命令你可以使用`telnet`命令来测试远程主机的端口是否可访问。以下是使用`telnet`命令测试端口的基本语法:```telnet<hostnameorIPaddress><port>```-`<hostnameorIPaddress>`:要测试的目标主机的主机名或IP地址。-`<port>`:要测试的端口号......
  • springboot集成EasyPoi,实现Excel/Word的导入导出
    前言在日常工作中,我们经常需要进行Excel或Word文档的导入和导出。这需要我们编写大量的代码和复杂的操作,从而增加了我们工作的难度。而EasyPoi就是针对这种情况而开发出来的一个简单易用的Java导入导出工具。EasyPoi是一个开源的Java导入导出工具,它提供了非常简单易用的API,可以让......
  • Intellij Idea创建Java Web项目
    创建非Maven的JavaWeb项目创建项目依次点击File->New->Project指定web服务器指定项目的名称及项目文件的保存地址创建成功创建class文件和lib文件夹点击项目的WEB-INF文件夹,右键,New→Directory创建两个文件夹,classes(用来存放编译后输出的class文件)和lib(用于......