您现在的位置是:首页 > 技术教程 正文

vue-virtual-scroll-list虚拟列表

admin 阅读: 2024-03-28
后台-插件-广告管理-内容页头部广告(手机)

当DOM中渲染的列表数据过多时,页面会非常卡顿,非常占用浏览器内存。可以使用虚拟列表来解决这个问题,即使有成百上千条数据,页面DOM元素始终控制在指定数量。

一、参考文档

https://www.npmjs.com/package/vue-virtual-scroll-list

二、引入

  1. import VirtualList from 'vue-virtual-scroll-list'
  2. components: {
  3. 'virtual-list': VirtualList
  4. }
  5. :data-key="'productCode'"
  6. :data-sources="productList"
  7. :data-component="productItem"
  8. :keeps="20"
  9. style="overflow-y: auto;"
  10. @scroll="(e) => watchScroll(e)"
  11. ref="scrollList"
  12. :extra-props="{
  13. addCart
  14. }"
  15. >

三、参数

参数描述

data-sources

数据列表[数组]

data-key

列表 key 值

data-component

列表子组件

keeps

渲染最大 DOM 数量

extra-props

额外参数,可传变量和方法

@scroll

监听滚动事件

四、注意

1、virtual-list 组件自身必须设置为滚动区域

style="overflow-y: auto;"

2、子组件引入由原 components 注册改为在 data 注册

  1. import productItem from '@components/product/productItem';
  2. data() {
  3. return {
  4. productList: [{productCode: 1, productName...}, {...}, ...], // 数据列表
  5. productItem // 子组件
  6. }
  7. }

3、子组件商品数据统一改为 source

  1. props: {
  2. source: {
  3. type: Object,
  4. default() {
  5. return {};
  6. }
  7. }
  8. }

4、子组件不再使用$emit方式与父组件交互,将父组件方法声明在extra-props中,子组件通过props接收,需要$emit 的时候使用 props 中接收的方法

  1. props: {
  2. // 接收父组件方法
  3. addCart: {
  4. type: Function,
  5. default: () => {}
  6. }
  7. }
  8. methods: {
  9. // 子组件点击加购按钮
  10. clickAddCart(item) {
  11. // 调用父组件加购方法
  12. this.addCart(item)
  13. }
  14. }

5、回到顶部,虚拟列表不识别 scrollTop,使用虚拟列表特有的 scrollToIndex 或 scrollToOffset 方法回到顶部

this.$refs.scrollList.scrollToIndex(0);

注意:真机滑动列表过程中,页面滚动有惯性,点击回到顶部时,页面会白屏,可以在点击的时候先关闭滚动,回到顶部后再恢复

  1. // 回到顶部先停止滚动,将overflow-y设置为hidden,解决滚动时回到顶部白屏问题
  2. this.$refs.scrolList.$el.style['overflow-y'] = 'hidden';
  3. this.$refs.scrolList.scrollToIndex(0);
  4. // 回到顶部后再恢复滚动
  5. this.$refs.scrolList.$el.style['overflow-y'] = 'auto';

标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索