首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用angular cdk虚拟滚动一次滚动两个列表?

Angular CDK(Component Dev Kit)是一个用于构建可重用组件的工具集,其中包含了一些常用的组件和工具函数。虚拟滚动是 Angular CDK 中的一个功能,它可以优化大型列表的性能,只渲染可见区域的内容,而不是全部渲染。

要实现一次滚动两个列表,可以按照以下步骤进行操作:

  1. 首先,确保你的 Angular 项目中已经安装了 Angular CDK。可以通过运行以下命令来安装:
代码语言:txt
复制
npm install @angular/cdk
  1. 在你的组件中引入必要的模块和组件:
代码语言:txt
复制
import { ScrollingModule, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
  1. 在组件的模板中,使用 cdkVirtualFor 指令来渲染虚拟滚动列表。例如,你可以创建两个 CdkVirtualScrollViewport 组件,分别绑定到两个不同的列表数据源:
代码语言:txt
复制
<cdk-virtual-scroll-viewport itemSize="50" class="list1" #list1>
  <div *cdkVirtualFor="let item of list1Data">
    {{ item }}
  </div>
</cdk-virtual-scroll-viewport>

<cdk-virtual-scroll-viewport itemSize="50" class="list2" #list2>
  <div *cdkVirtualFor="let item of list2Data">
    {{ item }}
  </div>
</cdk-virtual-scroll-viewport>
  1. 在组件的 TypeScript 代码中,获取对应的 CdkVirtualScrollViewport 实例,并监听其滚动事件。当一个列表滚动时,通过设置另一个列表的滚动位置来实现同时滚动:
代码语言:txt
复制
import { ViewChild } from '@angular/core';

export class YourComponent {
  @ViewChild('list1') list1: CdkVirtualScrollViewport;
  @ViewChild('list2') list2: CdkVirtualScrollViewport;

  // ...

  ngAfterViewInit() {
    this.list1.scrolledIndexChange.subscribe(index => {
      this.list2.scrollToIndex(index);
    });

    this.list2.scrolledIndexChange.subscribe(index => {
      this.list1.scrollToIndex(index);
    });
  }
}

通过以上步骤,你可以实现一次滚动两个列表的效果。当一个列表滚动时,另一个列表会跟随滚动到相同的位置。

关于 Angular CDK 虚拟滚动的更多信息,你可以参考腾讯云的相关文档和示例代码:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

vuejs中使用axios时如何实现滑动滚动条来动态加载列表数据

前言 在vuejs中,我们经常使用axios来请求数据,但是有时候,我们请求的数据量很大,那么我们如何实现滑动滚动条来加载数据呢?...,距离顶部的距离,获取变量scrollHeight是滚动条的总高度,获取变量clientHeight是滚动条可视区域的高度 当滚动条到达底部,并且距离底部小于10px时,加载数据,也就是请求axios数据...,页码++,重新加载数据函数 为了防止用户频繁触发下拉滑动滚动条,往往需要添加一个函数防抖,在指定的时间内,只执行最后一次事件处理函数,避免频繁请求数据,给服务器造成压力 代码实现 ...handleBtnGetJoke(); window.addEventListener('scroll', debounce(handleScroll,500)); // 引入函数防抖,避免频繁触发,只执行最后一次事件处理函数...只执行最后一次 // 函数的防抖 function debounce(method, duration) { var timer = null; return function

47350

Angular 结合 rxjs 实现拖拽

这是我参与「掘金日新计划 · 4 月更文挑战」的第12天, 在上两篇文章中,我们学习了元素中必知重要属性和方法和 Angular 中自定义 Video 操作,没有度过的读者可先了解。...页面中 video 标签,当滚动高度超过其位置之后,将其设置为可在可视区域自由拖拽。...一个不错的 Idea,如果你使用 Angular 的 @angular/cdk/drag-drop 可以轻松实现,但是我们这里不使用工具。...好吧,我们来分析下实现的思路: 页面滚动高度大于视频所在的位置:那么就是视频的 bottom 值相对可视窗口的值要小于0,我们需要设定一个包裹 video 标签的 div 方便计算,其高度是原设定 video...ngAfterViewInit(): void { this.scroll = fromEvent(document, 'scroll'); this.scrollFn(); } // 页面滚动

89810
  • Angular 11正式发布:加入webpack 5,升级至TS 4.0,不再支持IE 9 和10

    自动内联字体 为了加快应用的第一次内容绘制,从而让你的应用变得更快,我们引入了自动字体内联。在编译时,Angular CLI 将下载和内联在应用程序中使用和链接的字体。...有关这些 API 和其他新特性的更多细节和示例,请务必查看 Angular Material Test Harnesses 的文档: http://material.angular.io/cdk/test-harnesses...输入表单的数据以及滚动位置都会保持原样,从而提高了开发人员的工作效率。 更快的构建 通过对一些关键领域所做的更新,我们带来了更快的开发和构建周期。...IE11 是 Angular 还在支持的唯一 IE 版本。我们还移除了一些已弃用的 API,并在弃用列表中添加了一些项目。...如何获取版本 11 更新 当你准备好时,请运行以下命令来更新 Angular 和 CLI: ng update @angular/cli @angular/core 可以前往 update.angular.io

    3.3K30

    Angular 6正式版发布,都有哪些新功能

    学习更多关于如何使用ng update , 开始学习如何创建您自己的 ng update 语法,可以参考 rxjs 的 package.json 的入口,它关联了 collection.json。...Angular Material + CDK 组件 最值得一提的是用于显示分层数据的树形控件,遵循数据表组件的模式,CDK 包含树的核心指令,而 Angular Material 则提供与顶层的 Material...目前,@angular/cdk/overlay 软件包是 CDK 最强大的基础架构之一,你可以利用他们来构建自己的 UI 库。...例如,运行如下代码: ng generate @angular/material:material-nav Material Dashboard Material Dashboard 是包含动态网格列表的启动组件...如何更新到 Angular 6.0.0 读者可以访问 update.angular.io 来得到升级应用的信息和指导。

    4.2K20

    前端框架与库 - Angular基础:组件、模板、服务

    本文将深入浅出地介绍 Angular 中的组件、模板和服务,探讨常见问题、易错点及如何避免,并通过代码示例加深理解。 组件 组件是 Angular 的核心构建块,每个应用都是由多个组件组成的。...'; } } 模板 Angular 的模板语言允许你在 HTML 中嵌入 TypeScript 表达式,使用插值表达式、属性绑定、事件绑定等语法糖。...性能问题 过度使用ngFor和ngIf可能导致不必要的渲染。优化这些指令的使用,例如,使用TrackBy函数减少重复渲染。 服务注入 忽略服务的注入范围可能导致内存泄漏或全局状态混乱。...如何避免这些问题 使用事件发射器 在父子组件之间使用事件发射器进行通信,避免直接访问。 性能优化 对于大型列表使用虚拟滚动技术来提高性能。...通过理解和应用这些原则,你可以构建健壮、高效的 Angular 应用,避免常见的开发陷阱。

    18410

    前端框架与库 - Angular基础:组件、模板、服务

    本文将深入浅出地介绍 Angular 中的组件、模板和服务,探讨常见问题、易错点及如何避免,并通过代码示例加深理解。组件组件是 Angular 的核心构建块,每个应用都是由多个组件组成的。...'; }}模板Angular 的模板语言允许你在 HTML 中嵌入 TypeScript 表达式,使用插值表达式、属性绑定、事件绑定等语法糖。...性能问题undefined过度使用ngFor和ngIf可能导致不必要的渲染。优化这些指令的使用,例如,使用TrackBy函数减少重复渲染。...如何避免这些问题使用事件发射器undefined在父子组件之间使用事件发射器进行通信,避免直接访问。性能优化undefined对于大型列表使用虚拟滚动技术来提高性能。...通过理解和应用这些原则,你可以构建健壮、高效的 Angular 应用,避免常见的开发陷阱。

    14610

    如何让10万条数据的小程序列表如丝般顺滑

    组件内的节点数也是有限制的,但是你可以一层层嵌套组件实现列表的无限加载,如果你不怕麻烦的话 四.使用虚拟列表 经过上面的一系列操作后,列表的性能会得到很大的提升,但是如果数据量实在太大,wxml节点数也会超出限制...我们的处理方法是使用虚拟列表,页面只渲染当前可视区域以及可视区域上下若干条数据的节点,通过isDisplay控制节点的渲染。...oldSrollTop:0,//记录上一次滚动滚动条高度,判断滚动方向 prepareNum:5,//可视区域上下方要渲染的数量 throttleTime:...五.使用自定义组件和虚拟列表的对比。 虽然不知道为什么,但是直觉告诉我使用自定义组件性能会相对差一点。为了对比两种方法的优劣,使用了Trace工具对一个5000条带图片数据进行了性能测试。...而虚拟列表在增加数据的同时,也会销毁相同数量的数据,所以内存占比会稳定在一个数量。具体到这个测试dome,5000条数据使用自定义组件,最后占用2000MB的内存,而虚拟列表稳定在700MB。

    67910

    如何让10万条数据的小程序列表如丝般顺滑

    组件内的节点数也是有限制的,但是你可以一层层嵌套组件实现列表的无限加载,如果你不怕麻烦的话 四.使用虚拟列表 经过上面的一系列操作后,列表的性能会得到很大的提升,但是如果数据量实在太大,wxml节点数也会超出限制...我们的处理方法是使用虚拟列表,页面只渲染当前可视区域以及可视区域上下若干条数据的节点,通过isDisplay控制节点的渲染。...oldSrollTop:0,//记录上一次滚动滚动条高度,判断滚动方向 prepareNum:5,//可视区域上下方要渲染的数量 throttleTime:...五.使用自定义组件和虚拟列表的对比。 虽然不知道为什么,但是直觉告诉我使用自定义组件性能会相对差一点。为了对比两种方法的优劣,使用了Trace工具对一个5000条带图片数据进行了性能测试。...而虚拟列表在增加数据的同时,也会销毁相同数量的数据,所以内存占比会稳定在一个数量。具体到这个测试dome,5000条数据使用自定义组件,最后占用2000MB的内存,而虚拟列表稳定在700MB。

    1.9K10

    小程序长列表性能优化实践

    组件内的节点数也是有限制的,但是你可以一层层嵌套组件实现列表的无限加载,如果你不怕麻烦的话 四.使用虚拟列表 经过上面的一系列操作后,列表的性能会得到很大的提升,但是如果数据量实在太大,wxml节点数也会超出限制...我们的处理方法是使用虚拟列表,页面只渲染当前可视区域以及可视区域上下若干条数据的节点,通过isDisplay控制节点的渲染。...oldSrollTop:0,//记录上一次滚动滚动条高度,判断滚动方向 prepareNum:5,//可视区域上下方要渲染的数量 throttleTime:...五.使用自定义组件和虚拟列表的对比。 虽然不知道为什么,但是直觉告诉我使用自定义组件性能会相对差一点。为了对比两种方法的优劣,使用了Trace工具对一个5000条带图片数据进行了性能测试。...而虚拟列表在增加数据的同时,也会销毁相同数量的数据,所以内存占比会稳定在一个数量。具体到这个测试dome,5000条数据使用自定义组件,最后占用2000MB的内存,而虚拟列表稳定在700MB。

    1.1K20

    如何处理 React 中的 onScroll 事件?

    通过使用 useEffect 钩子,我们在组件挂载时添加滚动事件的监听器,然后在组件卸载时移除监听器。注意在 useEffect 的依赖项数组中传入一个空数组 [],以确保监听器只被添加一次。...通过使用节流或防抖,我们可以控制滚动事件处理函数的触发频率,避免过多的计算和渲染。虚拟化技术当滚动区域包含大量的元素时,为了避免性能问题,我们可以使用虚拟化技术来优化滚动事件处理。...在 React 中,有一些流行的虚拟化库,如 react-virtualized 和 react-window,可以帮助我们实现滚动区域的虚拟化。...使用这些库,我们可以将大型列表或表格分成可见区域和不可见区域,并动态加载和卸载元素,以优化性能。结论本文详细介绍了如何处理 React 中的滚动事件(onScroll),以及一些优化技巧。...我们学习了如何添加滚动事件监听器、使用节流和防抖来控制事件处理函数的触发频率,以及使用虚拟化技术来优化滚动区域的性能。

    3.5K10

    写了个自定义指令,支持elementUI2.0下拉框组件虚拟列表显示

    由于elementPlus已经支持了下拉组件虚拟列表,但所在项目仍然使用elementUI2.0,所以需要自己扩展支持下拉组件虚拟列表,以下是笔者总结的一篇关于elementUI2.0支持下拉框虚拟列表的实践方案...在开始本文之前,笔者主要会从以下方向上去实现该业务需求 1、尝试在原有elementUI组件上,写一个自定义指令,支持下拉虚拟列表 2、尝试使用社区成熟的虚拟列表插件方案实现虚拟列表 前置 我们知道虚拟列表本质上就是在可视区域内显示对应的数据...,由于数据是按需加载,所以我们首先就要明白如何实现虚拟列表,具体可以参考以前写的一篇文章了解虚拟列表背后原理,轻松实现虚拟列表 快速实现页面 我们是使用vue-cli2快速搭建了一个基本项目 我们可以非常清晰的看到右侧下拉测试...下拉框并不是一次性渲染所有数据,而是按需获取可视区域的数据,这是如何实现的?...在以上例子中我们尝试用自己写的指令已经满足虚拟列表,那如果不用自己写的指令,使用社区的方案,会不会更快,更简单呢?

    2.2K20

    虚拟滚动之原理及其封装

    虚拟滚动之原理及其封装 这仍然是笔者正在进行中某个前端基础项目的一项基础研究。...(实际上是把锅丢到了后面)•无法实现动态反映选中状态•滚动条无法正确反映操作者当前浏览的信息在全部列表中的位置。而且我百万级数据加载,你一次给我加载十几条,滚到底太慢了,是想愚弄用户吗!...可视区渲染有个更出名的名字,叫做虚拟滚动——指的是只渲染可视区域的列表项,非可见区域的完全不渲染,在滚动滚动时动态更新列表项。...有两个重要的基本概念: •可滚动区域:假设有 1000 条数据,每个列表项的高度是 30,那么可滚动的区域的高度就是 1000 * 30。...相比较于懒渲染,虚拟滚动要求一次性全部拿到数据,但是滚动条能够完全正确地反映当前页面在全部数据的位置。滚动无非是对几十个dom进行操作,可以达到极高的后续渲染性能。

    9.9K20

    虚拟列表与 Scroll Restoration

    虚拟列表是为了提高页面性能而出现的。我们知道,一个页面上的 DOM 树越复杂,节点越多性能越低,每次重排(reflow)的成本越高。于是,虚拟列表出现了。...虚拟列表的原理是只渲染可视部分以及部分预渲染的节点,待滚动之后替换可视部分节点。余下的空间则用 padding-top padding-bottom 撑开。...渲染 50 个 Node,实际只渲染了可见部分的 Node 本篇文章不讨论如何实现一个虚拟列表,此类文章网上有很多。但是有关于回退页面无法回到虚拟列表一次的位置的文章却很少。...)滚动,即使开启了 Restoration,回退页面后仍然无法回到上一次的位置。...这是因为虚拟列表需要计算得出整个容器的高度,在计算之前容器没有高度,浏览器就不能回到之前的滚动高度了,因为高度不存在。

    88320

    7000字前端性能优化总结 | 干货建议收藏

    关于chrome开发者工具具体如何操作以及如何查看性能,可以看这篇文章性能优化篇——运行时性能分析 接下来就从加载时性能和运行时性能两个方面来讨论网站优化具体应该怎么做。...当你使用了React时,长列表的问题就会被进一步的放大。那么怎么来优化长列表呢? 1.1 实现虚拟列表 虚拟列表是一种用来优化长列表的技术。...这样保证了无论如何滚动,真实渲染出的dom节点只有可视区内的列表元素。 假设可视区内能展示5个子列表元素,及时长列表总共有1000个元素,但是每时每刻,真实渲染出来的dom节点只有5个。...比如判断页面是否滚动到底部,然后展示相应的内容;就可以使用节流,在滚动时每300ms进行一次计算判断是否滚动到底部的逻辑,而不用无时无刻地计算。...使用 Web Workers 前面提到了大量数据的渲染环节我们可以采用虚拟列表的方式实现,但是大量数据的计算环节依然会产生浏览器假死或者卡顿的情况.

    1K20

    万字长文:分享前端性能优化知识体系

    关于chrome开发者工具具体如何操作以及如何查看性能,可以看这篇文章性能优化篇——运行时性能分析 接下来就从加载时性能和运行时性能两个方面来讨论网站优化具体应该怎么做。...当你使用了React时,长列表的问题就会被进一步的放大。那么怎么来优化长列表呢? 1.1 实现虚拟列表 虚拟列表是一种用来优化长列表的技术。...这样保证了无论如何滚动,真实渲染出的dom节点只有可视区内的列表元素。 假设可视区内能展示5个子列表元素,及时长列表总共有1000个元素,但是每时每刻,真实渲染出来的dom节点只有5个。...比如判断页面是否滚动到底部,然后展示相应的内容;就可以使用节流,在滚动时每300ms进行一次计算判断是否滚动到底部的逻辑,而不用无时无刻地计算。...使用 Web Workers 前面提到了大量数据的渲染环节我们可以采用虚拟列表的方式实现,但是大量数据的计算环节依然会产生浏览器假死或者卡顿的情况.

    81640

    暴肝!7000 字的前端性能优化总结 | 干货建议收藏

    关于chrome开发者工具具体如何操作以及如何查看性能,可以看这篇文章性能优化篇——运行时性能分析 接下来就从加载时性能和运行时性能两个方面来讨论网站优化具体应该怎么做。...当你使用了React时,长列表的问题就会被进一步的放大。那么怎么来优化长列表呢? 1.1 实现虚拟列表 虚拟列表是一种用来优化长列表的技术。...这样保证了无论如何滚动,真实渲染出的dom节点只有可视区内的列表元素。 假设可视区内能展示5个子列表元素,及时长列表总共有1000个元素,但是每时每刻,真实渲染出来的dom节点只有5个。...比如判断页面是否滚动到底部,然后展示相应的内容;就可以使用节流,在滚动时每300ms进行一次计算判断是否滚动到底部的逻辑,而不用无时无刻地计算。...使用 Web Workers 前面提到了大量数据的渲染环节我们可以采用虚拟列表的方式实现,但是大量数据的计算环节依然会产生浏览器假死或者卡顿的情况.

    97920

    「前端进阶」高性能渲染十万条数据(虚拟列表)

    前言 在工作中,有时会遇到需要一些不能使用分页方式来加载列表数据的业务情况,对于此,我们称这种列表叫做 长列表。...在高性能渲染十万条数据(时间分片)一文中,提到了可以使用 时间分片的方式来对长列表进行渲染,但这种方式更适用于列表项的DOM结构十分简单的情况。本文会介绍使用 虚拟列表的方式,来同时加载大量数据。...为什么需要使用虚拟列表 假设我们的长列表需要展示10000条记录,我们同时将10000条记录渲染到页面中,先来看看需要花费多长时间: button</button...实现 虚拟列表的实现,实际上就是在首屏加载的时候,只加载 可视区域内需要的列表项,当滚动发生时,动态通过计算获得 可视区域内的列表项,并将 非可视区域内存在的列表项删除。...从演示效果上看,我们实现了基于 文字内容动态撑高列表项情况下的 虚拟列表,但是我们可能会发现,当滚动过快时,会出现短暂的 白屏现象。

    10.6K74

    如何渲染几万条数据并不卡住界面

    目录 背景 粗暴实现 分片实现 虚拟滚动列表形式 每项高度已知 每项高度未知 总结 背景 现在项目中列表页都会做成分页的形式,但是仍然存在一些场景:后端返回所有数据(可能成千上万条),前端渲染。...代码存放在VirtualScroll/zoneRender 虚拟滚动列表形式 长列表的渲染主要存在两个问题 白屏时间过长 页面节点过多 分片实现解决了第一个问题,但页面节点仍然是全量的。...因为浏览器视窗就这么高,我们能在用户滚动时动态替换当前视窗的内容,所以页面能始终保持少量节点,进而实现一个虚拟滚动列表。...+ this.remain // 计算显示范围 } 还需要两个变量start/end记录当前视窗展示列表的范围。...虚拟滚动列表实现主要是参考于@tangbc/vue-virtual-scroll-list 总结 虚拟滚动列表实现非常巧妙的保证了几乎没有白屏时间、少量的页面节点。

    61810

    OEA 中 WPF 树型表格虚拟化设计方案

    但是,要同时在一个表格控件中同时实现行、列虚拟化呢?我们得先看看如何在 WPF 中实现虚拟化。...要知道如何实现 IScrollInfo,则需要明白 IScrollInfo 的设计原理:     如果 UIVPanel 元素自己要处理滚动信息,它必须知道当前滚动条的 OffSet,并告知 ScrollViewer...那么,在这样层次要求下,要如何实现只使用一个滚动条的虚拟化呢?还好,WPF 自带的 DataGrid 也带有行列虚拟化的功能,我们可以先看一下 DataGrid 是如何实现的。...* 另外,需要额外说明下两个 ItemsControl 的数据源:DataGrid 的 ItemsSource 当然就是应用层指定的数据模型的列表,这样,每一个 DataGridRow 的 DataContext...(内部实现上,MS 使用了一个实现 IList 接口的 MultipleCopiesCollection 集合类型,只需要设置 CopiedItem 及 Count 两个属性,即可表现出长为 Count

    2.7K70
    领券