vue-virtual-scroll-list虚拟列表

这篇具有很好参考价值的文章主要介绍了vue-virtual-scroll-list虚拟列表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

vue-virtual-scroll-list,html,vue,js,vue.js,javascript,前端

一、参考文档

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

二、引入

import VirtualList from 'vue-virtual-scroll-list'

components: {
  'virtual-list': VirtualList
}

<virtual-list
  :data-key="'productCode'"
  :data-sources="productList"
  :data-component="productItem"
  :keeps="20"
  style="overflow-y: auto;"
  @scroll="(e) => watchScroll(e)"
  ref="scrollList"
  :extra-props="{
    addCart
  }"
>

三、参数

参数 描述

data-sources

数据列表[数组]

data-key

列表 key 值

data-component

列表子组件

keeps

渲染最大 DOM 数量

extra-props

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

@scroll

监听滚动事件

四、注意

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

style="overflow-y: auto;"

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

import productItem from '@components/product/productItem';

data() {
  return {
    productList: [{productCode: 1, productName...}, {...}, ...], // 数据列表
    productItem // 子组件
  }
}

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

props: {
  source: {
    type: Object,
    default() {
      return {};
    }
  }
}

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

props: {
  // 接收父组件方法
  addCart: {
    type: Function,
    default: () => {}
  }
}

methods: {
  // 子组件点击加购按钮
  clickAddCart(item) {
    // 调用父组件加购方法
    this.addCart(item)
  }
}

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

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

注意:真机滑动列表过程中,页面滚动有惯性,点击回到顶部时,页面会白屏,可以在点击的时候先关闭滚动,回到顶部后再恢复文章来源地址https://www.toymoban.com/news/detail-840025.html

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

到了这里,关于vue-virtual-scroll-list虚拟列表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue长列表优化之虚拟列表实现

    应用场景 :后台一次性发送上千条或更多数据给前台 场景模拟:用户发起一个请求,后台发送了10w条数据 使用虚拟列表之前 :前台需要生成10w个dom节点用来渲染页面 使用虚拟列表之后 :前台只需要生成少量dom节点(dom节点数量取决于前端视图需要展示的数量),就可以实现对这10w条

    2023年04月22日
    浏览(29)
  • Vue2虚拟列表,umy-ui封装

    1、需求: 由于业务需求在页面一次性展示较多数据,不低于上千,但是每条数据涉及样式较多,数据渲染过多就会导致页面卡顿 2、满足: 大量数据加载;表格功能:列显隐、列顺序调整、固定、筛选、排序;表格调整存储本地 3、技术框架: 若依、Element UI、vue2 1、umy-ui库

    2024年02月04日
    浏览(45)
  • taro-ui-vue3 的虚拟列表组件VirtualScroll

    项目:taro3+vue3 用法: 参数 height — 列表容器高度 item-height — 列表item高度 items — 列表数据 注意点 :item-height不能直接用设计稿里面的高度xxpx,要转成rpx, 而css里面item的高度用设计稿的高度,比如设计稿宽750px, item高200px,间距20px, 列表容器高度是81vh, 如果容器需要减去其

    2024年02月16日
    浏览(28)
  • vue最强table vxe-table 虚拟滚动列表 前端导出

    最近遇到个问题。后台一次性返回2万条列表数据。 并且需求要求所有数据必须全部展示,不能做假分页(不能优化了)。 这些数据的直接来源就是CS客户端。 他们做CS客户端就是一次性加载几万条数据不分页(说这是客户的要求)。 我体验了一把CS客户端,数万条数据放在

    2024年02月12日
    浏览(38)
  • Python虚拟环境(Virtual Environment)

    Python虚拟环境是一种用于隔离和管理项目所需的Python解释器及其依赖库的工具。它可以让我们在同一台机器上同时运行多个项目,并且每个项目都可以有不同的依赖库和Python版本。虚拟环境可以为每个项目提供独立的运行环境,避免各项目之间的依赖冲突。 在开发项目时,我

    2024年01月20日
    浏览(72)
  • 虚拟相机 Cinemachine Virtual Camera

    本质上,虚拟相机应该是 相机行为 的配置文件,虚拟相机之间的切换实际上就是在进行相机行为之间的切换; 虚拟相机并不会创建任何摄像机,他只会创建虚拟节点,实际上操作的是 Cinemachine Brain 虚拟相机属性设置完毕后,应尽量避免在游戏中对齐进行修改, 如有需要可以多创建几

    2024年02月11日
    浏览(31)
  • Java 21 新特性:虚拟线程(Virtual Threads)

    在Java 21中,引入了虚拟线程(Virtual Threads)来简化和增强并发性,这使得在Java中编程并发程序更容易、更高效。 虚拟线程,也称为“用户模式线程(user-mode threads)”或“纤程(fibers)”。该功能旨在简化并发编程并提供更好的可扩展性。虚拟线程是轻量级的,这意味着它

    2024年02月08日
    浏览(35)
  • 虚拟声卡(虚拟扬声器和虚拟麦克风)应用之音频回环(Virtual Audio Cable)

    首先在了解Virtual Audio Cable音频回环技术之前,我们先介绍几个基础的概念: 虚拟声卡:是一种硬件虚拟化技术;基于软件技术虚拟出麦克风或者虚拟扬声器硬件,提供给上层用户程序使用虚拟麦克风和扬声器,例如通过给虚拟扬声器喂送音频数据实现麦克风录音效果。 音频

    2024年01月17日
    浏览(130)
  • ARM AArch64的虚拟化(virtualization)详解(上)

    目录 一、概述 开始之前 二、虚拟化介绍 为什么虚拟化很重要

    2024年02月02日
    浏览(51)
  • ARM AArch64的虚拟化(virtualization)详解(下)

    目录 六、异常的虚拟化 启用虚拟中断 生成虚拟中断 将中断转发(forward)到vCPU示例

    2024年02月03日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包