A vue (2.x) component that supports big data and infinite loading by using virtual scroll list.
-
Tiny and very easy to use.
-
Big data list and infinite loading with high performance.
-
Support set the initial scroll index or change any.
-
Event scrolling, reach top and bottom can be detected.
npm install vue-virtual-scroll-list --save
<template>
<div>
<virtualList :size="40" :remain="8">
<Item v-for="(item, index) of items" :item="item" :key="item.id" />
</virtualList>
</div>
</template>
<script>
import Item from '../item.vue'
import virtualList from 'vue-virtual-scroll-list'
export default {
name: 'demo',
data () {
return {
items: [...]
}
},
components: { Item, virtualList }
}
</script>
The <Item>
component is included inside but defined outside the <virtualList>
component. We see that <virtualList>
does not rely on the <Item>
component. So you can use virtual-list with any list item component freely.
<script src="https://unpkg.com/[email protected]/dist/vue.js"></script>
<script src="https://tangbc.github.io/vue-virtual-scroll-list/index.js"></script>
<div id="app">
<virtual-list :size="40" :remain="8">
<div class="item" v-for="(item, index) of items" :key="index">Item: # {{ index }}</div>
</virtual-list>
</div>
// Global name as `VirutalScrollList`
Vue.component('virtual-list', VirutalScrollList)
new Vue({
el: '#app',
data: {
items: new Array(100000)
}
})
-
List
<Item/>
component or DOM frag usingv-for
must designate the:key
property. -
Consider use
box-sizing: border-box;
on<Item/>
if you want absolutely correct scroll height.
Prop | Type | Required | Description |
---|---|---|---|
size | Number | ✓ | Each list item height, currently only supports fixed height. |
remain | Number | ✓ | How many items should be shown in virtual-list viewport, so size and remain will determine the virtual-list outside container height (size × remian). |
start | Number | * | Default value is 0 , the initial scroll start index. It must be integer and in the range of list index, throws a warning if index does not exist. |
rtag | String | * | Default value is div , the virtual-list's root HTMLElement tag name, in all case it's style is set to display: block; |
rtagClass | String | * | Default value is an empty string, the virtual-list's root HTMLElement tag's classes. Has the same API has v-bind:class |
wtag | String | * | Default value is div , the virtual-list's item wrapper HTMLElement tag name, in all case it's style is set to display: block; |
wtagClass | String | * | Default value is an empty string, the virtual-list's item wrapper HTMLElement tag's classes. Has the same API has v-bind:class |
onscroll | Function | * | Called when virtual-list scroll event handling, param: (e, scrollTop) . |
totop | Function | * | Called when the virtual-list is scrolled to top. |
tobottom | Function | * | Called when the virtual-list is scrolled to bottom. |
Welcome to improve vue-virtual-scroll-list by any pull request or issue.
Maintain and update occasionally, for changes see release.