<!-- 虚拟滚动组件 -->
|
|
<template>
|
|
<view class="virtualScroll">
|
|
<view class="virtualScroll-title">{{ $t('page.virtualScroll.title') }}</view>
|
|
<!-- 滚动列表 -->
|
|
<view
|
|
:style="{ height : scrollListLength >= maxShowNumber ? `${ maxShowNumber * 160 }rpx` : `${scrollListLength * 164}rpx` }"
|
|
class="scroll-list">
|
|
<view :class="{ animate }" :style="{ transform : `translate(0rpx,${ -scrollPostion }rpx)`}">
|
|
<!-- 主要数据 -->
|
|
<view class="scroll-list-main-data">
|
|
<view ref="scrollItem" v-for="item in scrollList" :key="item.id" class="scroll-item">
|
|
<view class="user-name">{{ item.auccont }}</view>
|
|
<view class="money">{{ item.money }}</view>
|
|
<view class="time">{{ item.createTime }}</view>
|
|
</view>
|
|
</view>
|
|
<!-- 副本数据 -->
|
|
<view class="scroll-list-copy-data">
|
|
<view v-for="item in scrollList" :key="item.id" class="scroll-item">
|
|
<view class="user-name">{{ item.auccont }}</view>
|
|
<view class="money">{{ item.money }}</view>
|
|
<view class="time">{{ item.createTime }}</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
data() {
|
|
return {
|
|
scrollList: [], //滚动的数据列表
|
|
scrollListLength: 0, //滚动数据列表数据总数
|
|
maxShowNumber: 3, //显示个数
|
|
scrollInterval: null, //控制元素滚动的定时器
|
|
topInterval: null, //返回顶部定时器
|
|
scrollPostion: 0, //滚动位置
|
|
animate: true, //是否显示延迟动画效果
|
|
lineHeight: 0, //每个滚动元素的高度
|
|
}
|
|
},
|
|
mounted() {
|
|
this.getScrollList()
|
|
},
|
|
methods: {
|
|
//获取滚动列表
|
|
async getScrollList() {
|
|
this.request('getIndexScroll').then(res => {
|
|
if (res.code == 200) {
|
|
this.scrollList = res.result
|
|
this.scrollListLength = res.result.length
|
|
this.scroll()
|
|
}
|
|
})
|
|
},
|
|
|
|
//控制元素滚动
|
|
scroll() {
|
|
this.scrollInterval = setInterval(() => {
|
|
this.animate = true
|
|
this.scrollPostion += 160
|
|
}, 1000)
|
|
|
|
this.topInterval = setInterval(() => {
|
|
if (this.scrollPostion > this.scrollListLength * 160) {
|
|
this.animate = false
|
|
clearInterval(this.scrollInterval)
|
|
clearInterval(this.topInterval)
|
|
this.scrollPostion = 0
|
|
this.scroll()
|
|
}
|
|
}, 100)
|
|
},
|
|
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.virtualScroll {
|
|
margin: 0rpx auto;
|
|
width: 96%;
|
|
|
|
.virtualScroll-title {
|
|
display: flex;
|
|
align-items: center;
|
|
font-size: 36rpx;
|
|
height: 80rpx;
|
|
color: $uni-bg-color-app;
|
|
}
|
|
|
|
.scroll-list {
|
|
overflow: hidden;
|
|
|
|
// 主要数据 、副本数据
|
|
.scroll-list-main-data,
|
|
.scroll-list-copy-data {
|
|
padding-top: 20rpx;
|
|
|
|
.scroll-item {
|
|
display: flex;
|
|
align-items: center;
|
|
height: 140rpx;
|
|
width: 98%;
|
|
margin-left: 1%;
|
|
margin-bottom: 20rpx;
|
|
border-radius: 10rpx;
|
|
box-shadow: 4rpx 4rpx 10rpx rgba(0, 0, 0, .1),
|
|
-4rpx -4rpx 10rpx rgba(0, 0, 0, .1);
|
|
|
|
view {
|
|
flex: 1;
|
|
text-align: center;
|
|
|
|
&:nth-child(3) {
|
|
flex: 2;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
.animate {
|
|
transition: all .4s linear;
|
|
}
|
|
|
|
}
|
|
}
|
|
</style>
|