最近在做长列表的时候,遇到此类问题
首先的话,应该去看一下官网:www.npmjs.com/package/vue…
然后再main.js中导入,注册使用,千万一定要记得要把样式导入进去。
import 'vue-virtual-scroller/dist/vue-virtual-scroller.css'
import VueVirtualScroller from 'vue-virtual-scroller'
Vue.use(VueVirtualScroller)
高度的盒子,并且还需要进行上拉加载
用的组件就是DynamicScroller和DynamicScrollerItem,因为第一个组件RecycleScroller官网也说了,只能用于固定高度的情况下。
这一块的话,其实最主要的就是替换了组件。删除了传入固定高度的代码。
<template>
<div>
<DynamicScroller
:items="items"
:min-item-size="54"
class="scroller"
:emitUpdate="true"
@update="update"
@resize="resize"
@visible="visible"
@hidden="hidden"
@scroll="scroll"
v-if="items.length"
>
<template v-slot="{ item, index, active }">
<DynamicScrollerItem
:item="item"
:active="active"
:size-dependencies="[item.message]"
:data-index="index"
>
<li class="single-item" :key="item.id">
<div class="left-pic"><img :src="item.img" alt="" /></div>
<div class="right-info">
<span>标题:{{ item.title }}</span>
<span>项目数量:{{ item.id }}</span>
<span>项目时间:{{ item.time }}</span>
<span>项目描述:{{ item.des }}</span>
</div>
</li>
</DynamicScrollerItem>
</template>
</DynamicScroller>
</div>
</template>
<script>
export default {
name: 'test',
data () {
return {
items: []
}
},
created () {
this.getData()
},
mounted () {},
methods: {
getData () {
this.$axios('/home/swiper').then(res => {
console.log(res)
this.items = res.data.data.list
})
},
scroll () {
console.log(111)
},
update (start, end) {
if (end === this.items.length) {
console.log(1111)
let temp = []
this.$axios('/home/add').then(res => {
temp = [...this.items, ...res.data.data.list]
this.items = temp
})
}
},
resize () {
console.log('resize')
},
visible () {
console.log('visible')
},
hidden () {
console.log('hidden')
}
}
}
</script>
<style lang="less" scoped>
.scroller {
height: 300px;
background-color: #ccc;
}
.user {
height: 32%;
padding: 0 12px;
display: flex;
}
.single-item {
display: flex;
justify-content: flex-start;
align-items: center;
border-bottom: 1px solid rgb(187, 167, 167);
.left-pic {
width: 200px;
img {
width: 200px;
}
}
.right-info {
padding-left: 20px;
text-align: left;
span {
display: block;
&:last-child {
word-break: break-all;
}
}
}
}
</style>