vue中el-table两个表尾合计行联动同步滚动条实例代码
作者:水冗水孚 发布时间:2023-07-02 17:08:56
标签:el-table,滚动条,同步
问题描述
最近产品提出一个需求,说是做表格呈现统计数据,不过数据源是来自两个地方的,所以需要做两个表格去呈现数据,同时在表格最后统计数据。
效果图
我们先看一下效果图
思路
获取对应的两个表格设置滚动条的dom,并通过Element.scrollLeft去设置滚动的距离
官方文档:developer.mozilla.org/zh-CN/docs/…
滚动容器(审查元素即可得知):
完整代码
自己演示的话,直接复制粘贴即可,代码中包含注释
<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


猜你喜欢
- SQL Server 2016 CTP2.2 安装配置教程下载一个iso文件,解压出来(大约2.8G左右),在该路径下双击Setup.exe
- 最近因为要安装Tensorflow,然后发现tensorflow居然不支持python3.7,于是怒而将其降级到3.6以下是具体命令,mar
- 题目描述利用opencv或其他工具编写程序实现医学处理。实现过程# -*- coding: utf-8 -*-'''
- 题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。这个题目完
- 目录一、MySQL主从搭建操作步骤二、Django实现读写分离自动指定一、MySQL主从搭建主从配置原理:主库写日志到 BinLog从库开个
- 说明: (1)Linux版本Linux version 2.6.32.12-0.7-default (geeko@buildhost) (g
- <html> <head> <script type="text/javascript"&
- 第一步:下载mysql驱动cmd进入创建好的django项目目录:使用命令pip install mysqlclient等待安装
- 数据处理在现代企业运营中变得越来越重要,越来越关键,甚至会成为企业发展的一项瓶颈. 数据保护的重要性也不言而喻. 如果一个企业没有很好的数据
- 前言对于专业的python程序员来说,python打包工具或许用得并不多。但是对于非专业人士来说,你给他写个python项目,要让他安装py
- 概述对于中小体量的项目而言,联表查询是再常见不过的操作了,尤其是在做报表的时候。然而校对数据的时候,您发现坑了吗?本篇文章就 mysql 常
- PyQt中的线程类 QtCore.QThread ,使用时继承QThread类启动界面的线程暂称为UI线程。界面执行命令时都在自己的UI线程
- 本文实例讲述了python中range()与xrange()用法。分享给大家供大家参考,具体如下:据说range比xrange开销要大,原因
- 工厂模式(Factory Pattern)是什么工厂模式是一种创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会
- 错误提示: Warning: session_start() [function.session-start]: Cannot send s
- 目录引用dll静态类定时器启动备份代码总结引用dllmysql.data.dll是MySQL数据库中一款必备的驱动文件,主要用于.net编程
- 本次分享将讲述如何在Python中对多个list的对应元素求和,前提是每个list的长度一样。比如:a=[1,2,3], b=[2,3,4]
- 小编在以前给大家介绍过很多其他系统安装PyCharm的过程,有兴趣的朋友可以参阅:pycharm 使用心得(一)安装和首次使用python安
- 在SQL SERVER中如何通过SQL语句获取服务器硬件和系统信息呢?下面介绍一下如何通过SQL语句获取处理器(CPU)、内存(Memory
- 本文实例讲述了Yii开启片段缓存的方法。分享给大家供大家参考,具体如下:1、main.php文件中的components中添加:cache&