|
@ -0,0 +1,132 @@ |
|
|
|
|
|
<!-- 虚拟滚动组件 --> |
|
|
|
|
|
<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> |