vue中el-table兩個(gè)表尾合計(jì)行聯(lián)動(dòng)同步滾動(dòng)條實(shí)例代碼
問題描述
最近產(chǎn)品提出一個(gè)需求,說是做表格呈現(xiàn)統(tǒng)計(jì)數(shù)據(jù),不過數(shù)據(jù)源是來自兩個(gè)地方的,所以需要做兩個(gè)表格去呈現(xiàn)數(shù)據(jù),同時(shí)在表格最后統(tǒng)計(jì)數(shù)據(jù)。
效果圖
我們先看一下效果圖

思路
獲取對(duì)應(yīng)的兩個(gè)表格設(shè)置滾動(dòng)條的dom,并通過Element.scrollLeft去設(shè)置滾動(dòng)的距離
官方文檔:developer.mozilla.org/zh-CN/docs/…
滾動(dòng)容器(審查元素即可得知):

完整代碼
自己演示的話,直接復(fù)制粘貼即可,代碼中包含注釋
<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="序號(hào)" 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="序號(hào)" width="60">
</el-table-column>
<el-table-column
prop="bookType"
label="業(yè)務(wù)類型"
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. 初始化的時(shí)候,設(shè)置橫向滾動(dòng)規(guī)則
this.setScrollRule();
},
methods: {
setScrollRule() {
let that = this; // 存一份this便于取用
this.one = this.$refs.one.bodyWrapper; // 獲取帶有滾動(dòng)條的dom元素,注意餓了么UI的el-table的橫向滾動(dòng)條是設(shè)置在類名為
this.two = this.$refs.two.bodyWrapper; // class="el-table__body-wrapper is-scrolling-left" 這個(gè)dom上。審查元素可知
console.log("滾動(dòng)條dom容器", this.one);
// 2. 綁定滾動(dòng)事件,順帶加上一個(gè)節(jié)流函數(shù)吧,也算是性能優(yōu)化
this.one.addEventListener(
"scroll",
_.throttle(
function () {
that.fn1(); // 85毫秒觸發(fā)一次吧
},
85,
{
leading: true, //指定調(diào)用在節(jié)流開始前
trailing: false, //指定調(diào)用在節(jié)流結(jié)束后,
}
)
);
// 同上...
this.two.addEventListener(
"scroll",
_.throttle(
function () {
that.fn2();
},
85,
{
leading: true,
trailing: false,
}
)
);
},
// 3. 通過Element.scrollLeft屬性 可以讀取或設(shè)置元素滾動(dòng)條到元素左邊的距離
fn1() {
console.log("滾動(dòng)條一 移動(dòng)多少?", this.one.scrollLeft);
this.two.scrollLeft = this.one.scrollLeft;
/**
* 加了節(jié)流函數(shù)以后,就會(huì)出現(xiàn)當(dāng)我們滑動(dòng)過快的時(shí)候,遠(yuǎn)小于定義節(jié)流時(shí)間所觸發(fā)的間隔
* 就會(huì)出現(xiàn)距離不準(zhǔn)確問題,所以再加一個(gè)延時(shí)定時(shí)器重新更正(更新一下位置)
* */
setTimeout(() => {
this.two.scrollLeft = this.one.scrollLeft; // api文檔詳情見mdn文檔:https://developer.mozilla.org/zh-CN/docs/Web/API/Element/scrollLeft
}, 120);
},
// 同上...
fn2() {
console.log("滾動(dòng)條二 移動(dòng)多少?", this.two.scrollLeft);
this.one.scrollLeft = this.two.scrollLeft;
setTimeout(() => {
this.one.scrollLeft = this.two.scrollLeft;
}, 120);
},
},
beforeDestroy() {
// 移除事件監(jiān)聽
this.one.removeEventListener("scroll", this.fn1);
this.one.removeEventListener("scroll", this.fn2);
},
};
</script>總結(jié)
到此這篇關(guān)于vue中el-table兩個(gè)表尾合計(jì)行聯(lián)動(dòng)同步滾動(dòng)條的文章就介紹到這了,更多相關(guān)vue el-table聯(lián)動(dòng)同步滾動(dòng)條內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- vue3應(yīng)用elementPlus table并滾動(dòng)顯示問題
- vue3?el-table結(jié)合seamless-scroll實(shí)現(xiàn)表格數(shù)據(jù)滾動(dòng)的思路詳解
- vue中獲取滾動(dòng)table的可視頁面寬度調(diào)整表頭與列對(duì)齊(每列寬度不都相同)
- vue elementUI table表格數(shù)據(jù) 滾動(dòng)懶加載的實(shí)現(xiàn)方法
- vue element-ui table表格滾動(dòng)加載方法
- vue iview 隱藏Table組件里的某一列操作
- Vue基于iview table展示圖片實(shí)現(xiàn)點(diǎn)擊放大
- 淺談vue的iview列表table render函數(shù)設(shè)置DOM屬性值的方法
- vue 使用iView組件中的Table實(shí)現(xiàn)定時(shí)自動(dòng)滾動(dòng)效果
相關(guān)文章
詳解vue的數(shù)據(jù)劫持以及操作數(shù)組的坑
這篇文章主要介紹了vue的數(shù)據(jù)劫持以及操作數(shù)組的坑,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
Vue中nvm-windows的安裝與使用教程(親測(cè))
nvm全英文也叫node.js version management,是一個(gè)nodejs的版本管理工具,這篇文章主要介紹了Vue中nvm-windows的安裝與使用,需要的朋友可以參考下2023-02-02
vue2.0項(xiàng)目實(shí)現(xiàn)路由跳轉(zhuǎn)的方法詳解
這篇文章主要介紹了vue2.0項(xiàng)目實(shí)現(xiàn)路由跳轉(zhuǎn)的詳細(xì)方法,非常不錯(cuò),具有一定的參考借鑒借鑒價(jià)值,需要的朋友可以參考下2018-06-06
vue-cli項(xiàng)目配置多環(huán)境的詳細(xì)操作過程
vue-cli 默認(rèn)只提供了 dev 和 prod 兩種環(huán)境。這篇文章主要介紹了vue-cli項(xiàng)目配置多環(huán)境的詳細(xì)操作過程,需要的朋友可以參考下2018-10-10
關(guān)于ElementPlus中的表單驗(yàn)證規(guī)則詳解
這篇文章主要介紹了關(guān)于ElementPlus中的表單驗(yàn)證,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06
Vue3中watch監(jiān)聽對(duì)象的屬性值(監(jiān)聽源必須是一個(gè)getter函數(shù))
這篇文章主要介紹了Vue3中watch監(jiān)聽對(duì)象的屬性值,監(jiān)聽源必須是一個(gè)getter函數(shù),本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12

