vue,v-for制作翻页table表(滑动整张table实现翻页效果)
template代码
<div class="chart-bottom">
<h3 class="title2" :title="title2">{{title2}}</h3>
<div class="change">
<a class="left-img" :page='page' @click="changePage(-1)"></a>
<span>{{page.current}}/{{totalPage}}</span>
<a class="right-img" :page='page' @click="changePage(1)"></a>
</div>
<div class="table-box">
<table class="my-table table1">
<tr>
<th class="fisrt">
<div class='out'>
<em class="tr">时间</em>
<div class='line'></div>
<em class="lb">车型</em>
</div>
</th>
</tr>
<tr v-for='(item,key) in dateList' :key='key'>
<td class="name">{{item.carClass}}</td>
</tr>
</table>
<div class="table-box-inner">
<table class="my-table table2" :style="{transform:`translateX(-${left}px)`}">
<tr>
<th v-for='t in dateLen' :key="t" :class="{on:t%2==1}">{{t}}日</th>
</tr>
<tr v-for='(item,key) in dateList' :key='key'>
<td v-if="item.data.length" v-for='(t,i) in item.data' :key='i' :class="{on:i%2==0}">{{t|| ''}}</td>
</tr>
</table>
</div>
</div>
</div>
data代码,实现翻页页数的改变
data () {
return {
title2: '',
loading: false,
page: {
total: '',
current: 1,
pageSize: ''
},
dateList: [],
dateLen: ''
}
},
computed代码
computed: {
totalPage () {
return Math.ceil(this.page.total / this.page.pageSize)
},
left () {
let start = 6
let tdWidth = 65
return start + (this.page.current - 1) * tdWidth * (this.page.pageSize - 1)
}
}
methods代码
changePage (num) {
if (this.page.current + num <= this.totalPage && this.page.current + num > 0) {
this.page.current += num
}
},
async queryData () {
await this.$ajax({
methods: 'get',
url: '*********'
}).then(res => {
this.dateList = res.data.verticalAxis
this.dateList.forEach((item) => {
item.carClass = item.carClass.substring(0, item.carClass.length - 2)
})
this.dateLen = res.data.abscissa.length
this.page.total = this.dateLen
this.page.pageSize = (
(this.dateLen === 31) ? 16 : ((this.dateLen === 28) ? 14 : 15)
)
})
},
style
.table-box{
padding: 0 20px;
margin-top: 56px;
}
.table-box-inner{
margin-left: 75px;
padding-bottom: 1px;
overflow: hidden;
}
.my-table{
border:1px solid #09826a;
border-collapse: collapse;
&.table1{
width: 75px;
float: left;
}
&.table2{
width: max-content;
transform: translateX(-6px);
transition: all 1s ease;
th,
td{
width: 65px;
}
}
.fisrt{
width:92px;
}
.out{
border-top:60px;
width:0px;
height:0px;
border-left:150px;
position:relative;
.line{
position:absolute;
left: -7px;
width:87px;
height:1px;
transform:rotate(34deg);
background-color: #09826a;
}
}
.tr{font-style:normal;display:block;position:absolute;top: -18px;left: 27px;width: 50px;}
.lb{font-style:normal;display:block;position:absolute;top: 5px;left:-2px;width: 50px;}
.on {
background: rgba(22, 104, 111, 0.2);
}
.later{
width:63px;
}
.name{
color:#fff;
}
th,
td{
height: 50px;
border:1px solid #09826a ;
font-size: 14px;
text-align: center;
}
th{
font-weight: normal;
color:#fff;
}
td{
color:#00fff6;
}
}
/deep/.tip{
font-size: 12px;
color: #65b3b0
}
效果图()

