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

作者:水冗水孚 时间:2023-07-02 17:08:56 

问题描述

最近产品提出一个需求,说是做表格呈现统计数据,不过数据源是来自两个地方的,所以需要做两个表格去呈现数据,同时在表格最后统计数据。

效果图

我们先看一下效果图

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

思路

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

官方文档:developer.mozilla.org/zh-CN/docs/…

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

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

完整代码

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

<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://juejin.cn/post/7096320046305607716

标签:el-table,滚动条,同步
0
投稿

猜你喜欢

  • 再谈CSS样式表书写风格

    2009-03-30 16:09:00
  • Asp编写不再让人讨厌的自动弹出窗口

    2007-09-29 12:16:00
  • php 进阶:实现无限分类第1/4页

    2023-11-17 21:04:55
  • Django启动时找不到mysqlclient问题解决方案

    2024-01-17 15:55:29
  • Golang学习之无类型常量详解

    2024-02-14 13:41:09
  • css基础教程属性篇之二

    2008-07-25 19:23:00
  • mac os10.12安装mysql5.7.18教程

    2024-01-19 14:08:27
  • python连接池实现示例程序

    2022-04-30 21:59:54
  • Python实现将不规范的英文名字首字母大写

    2021-05-21 08:40:46
  • Python接口自动化之request请求封装源码分析

    2023-12-29 02:42:32
  • python生成器/yield协程/gevent写简单的图片下载器功能示例

    2022-02-25 10:08:03
  • OpenCV MediaPipe实现颜值打分功能

    2022-06-19 08:22:16
  • Python实例一个类背后发生了什么

    2023-05-19 05:44:18
  • Golang并发读取文件数据并写入数据库的项目实践

    2024-01-29 07:22:50
  • python使用pip安装SciPy、SymPy、matplotlib教程

    2022-03-05 01:46:12
  • python 常见的排序算法实现汇总

    2023-09-17 13:47:24
  • SEO与“nofollow”及“external nofollow”

    2007-12-15 09:31:00
  • Opera Mini 5 网站开发速记

    2010-04-20 16:29:00
  • python3 flask实现文件上传功能

    2022-11-19 18:42:10
  • python3 pillow模块实现简单验证码

    2021-07-04 11:10:44
  • asp之家 网络编程 m.aspxhome.com