美文网首页vue前端开发那些事儿
vue虚拟滚动(vue-virtual-scroll-list)

vue虚拟滚动(vue-virtual-scroll-list)

作者: 冷暖自知_zjz | 来源:发表于2021-02-04 15:23 被阅读0次

    背景

    ​ 在项目中有一个sku表(是一个尺码和颜色乘积的表格),假如有10个颜色,20个尺码,那这个sku表就会有200行。有一个客户有100个颜色的需求,100个颜色的时候如果有5个尺码,就会有500行,这样会使页面很卡,于是找到了vue-virtual-scroll-list这个插件。

    用法

    <template>
      <div>
        <virtual-list style="height: 360px; overflow-y: auto;" // make list scrollable
          :data-key="'id'"
          :data-sources="items"
          :data-component="itemComponent"
        />
      </div>
    </template>
     
    <script>
      import Item from './Item'
      import VirtualList from 'vue-virtual-scroll-list'
     function createData(len) {
         const arr = []
         for (let index = 0; index < len; index++) {
             const obj = { id: index, text: Math.random() }
             arr.push(obj)
         }
         return arr
     }
      export default {
        name: 'root',
        data () {
          return {
            itemComponent: Item,
            items: createData(200)
          }
        },
        components: { 'virtual-list': VirtualList }
      }
    </script>
    
    // item
    <template>
      <div>每一行的内容</div>
    </template>
     
    <script>
      export default {
        name: 'item-component',
        props: {
          index: { // 每一行的索引
            type: Number
          },
          source: { // 每一行的内容
            type: Object,
            default () {
              return {}
            }
          }
        }
      }
    </script>
    

    参数

    Prop Type Description
    data-key String|Function data-sources每个数据对象中获取唯一键。或每个函数都调用data-source并返回其唯一键。在中,其值必须唯一data-sources,用于标识商品尺寸。
    data-sources Array[Object] 列表数据,每一行都必须有一个唯一的id(data-key)
    data-component Component 每一行的子组件
    keeps Number 默认30个,默认渲染的个数
    extra-props Object 默认{} data-component组件的额外props通过改属性传入,内部已有source和index两个
    estimate-size Number 默认50,每一行的高度,如果接近平均大小,则滚动条长度看起来会更准确。
    scroll 事件 滚动时发出param (event, range)

    剩下的参数 https://www.npmjs.com/package/vue-virtual-scroll-list
    官网地址 https://tangbc.github.io/vue-virtual-scroll-list/#/

    原理

    vue-virtual-scroll-list.png

    如上图,他只渲染keeps传入的个数,滚动时通过改变padding的值来模拟滚动,里面的每一个item在滚动时动态替换里面的值

    核心源码如下


    vue-virtual-scroll-list原理.png

    永远之渲染props的keeps传入的个数,所以这样不会卡

    相关文章

      网友评论

        本文标题:vue虚拟滚动(vue-virtual-scroll-list)

        本文链接:https://www.haomeiwen.com/subject/bupbtltx.html