对于 Blazor 组件虚拟化支持flex-wrap: wrap与网格布局的研究 [二]

news/2025/1/17 18:38:54/文章来源:https://www.cnblogs.com/densen2014/p/18677521

接上篇文章 Blazor 通过组件虚拟化提高性能

自适应

可以试封装成组件, 公开 itemsPerRow 和 itemsHeight 等参数, 配合查询父元素/屏幕宽度,就能自适应调节了.

在 Blazor 组件中使用 JavaScript 互操作来查询 id="div-test" 元素的渲染宽度。以下是如何实现的步骤:

  1. 在 wwwroot/index.html 文件中添加一个 JavaScript 函数来获取元素的宽度:
<script>window.getElementWidth = (elementId) => {const element = document.getElementById(elementId);return element ? element.offsetWidth : 0;};
</script>
  1. 在 Virtualized.razor 文件中使用 JSRuntime 调用这个 JavaScript 函数,并在 OnAfterRenderAsync 方法中获取元素的宽度。
@page "/"<PageTitle>Virtualized Orders</PageTitle><h1>Virtualized Orders</h1><div id="div-test" style="height: 370px; overflow-y: scroll;  width: 380px; "><Virtualize Items="GroupedOrders" Context="orderGroup" ItemSize="16.667f"><div style="display: flex; flex-direction: row; flex-wrap: wrap; ">@foreach (var order in orderGroup){<div style="width: 100px; height: 100px; background-color: cadetblue; padding: 10px; margin: 10px;"><div>$ @order.Value</div></div>}</div></Virtualize>
</div><p>元素宽度: @elementWidth px</p>@code {private int elementWidth;int itemsPerRow = 3;public record Order(Guid Id, int Value);public IList<Order> Orders { get; set; } = new List<Order>();public IList<IEnumerable<Order>>? GroupedOrders { get; set; }[Inject]private IJSRuntime JSRuntime { get; set; }protected override async Task OnAfterRenderAsync(bool firstRender){if (firstRender){elementWidth = await JSRuntime.InvokeAsync<int>("getElementWidth", "div-test");StateHasChanged();}}protected override void OnInitialized(){var random = new Random();for (int i = 0; i < 100; i++){Orders.Add(new Order(Guid.NewGuid(), random.Next(20, 9999)));}GroupedOrders = Orders.Select((order, index) => new { order, index }).GroupBy(x => x.index / itemsPerRow).Select(g => g.Select(x => x.order)).ToList();}
}

加入自动计算

@page "/"<PageTitle>Virtualized Orders</PageTitle><h1>Virtualized Orders</h1><div id="div-test" style="height: 370px; overflow-y: scroll;  width: 90vw; "><Virtualize Items="GroupedOrders" Context="orderGroup"><div style="display: flex; flex-direction: row; flex-wrap: wrap; ">@foreach (var order in orderGroup){<div style="width: 100px; height: 100px; background-color: cadetblue; padding: 10px; margin: 10px;"><div>$ @order.Value</div></div>}</div></Virtualize>
</div>@code {private int elementWidth;int itemsPerRow = 3;int itemsHeight = 100; public record Order(Guid Id, int Value);public IList<Order> Orders { get; set; } = new List<Order>();public IList<IEnumerable<Order>>? GroupedOrders { get; set; }[Inject][System.Diagnostics.CodeAnalysis.NotNull]private IJSRuntime? JSRuntime { get; set; }protected override async Task OnAfterRenderAsync(bool firstRender){if (firstRender){elementWidth = await JSRuntime.InvokeAsync<int>("getElementWidth", "div-test");itemsPerRow = elementWidth / (itemsHeight+20);StateHasChanged();}}protected override void OnInitialized(){var random = new Random();for (int i = 0; i < 100; i++){Orders.Add(new Order(Guid.NewGuid(), random.Next(20, 9999)));}GroupedOrders = Orders.Select((order, index) => new { order, index }).GroupBy(x => x.index / itemsPerRow).Select(g => g.Select(x => x.order)).ToList();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/870899.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pebbles pg walkthrough Easy

NMAP ┌──(root㉿kali)-[/home/ftpuserr] └─# nmap -p- -A -sS 192.168.239.52 Starting Nmap 7.95 ( https://nmap.org ) at 2025-01-17 06:26 UTC Nmap scan report for 192.168.239.52 Host is up (0.071s latency). Not shown: 65530 filtered tcp ports (no-response)…

app_测试__uiautomatorviewer.bat(闪退)

uiautomatorviewer 闪退 1、原因原因jdk版本不兼容(直接装个jdk1.8) 2、进入sdk/tools/lib文件夹下,找到uiautomatorviewer.jar包添加上对应的内容,并保存 选择sdk/tools文件夹下的uiautomatorviewer.bat,右键选择编辑,将对应内容删除并保存 再次双击uiautomatorviewer.…

基于 KubeSphere v4 的 Kubernetes 生产环境部署架构设计及成本分析

本文作者:运维有术。 今天分享的主题是:如何规划设计一个高可用、可扩展的中小规模生产级 K8s 集群? 通过本文的指导,您将掌握以下设计生产级 K8s 集群的必备技能: 集群规划能力合理规划节点规模和资源配置 设计高可用的控制平面、计算平面、存储平面架构 规划网络拓扑和安…

阿里云通义实验室自然语言处理方向负责人黄非:通义灵码2.0,迈入 Agentic AI

在通义灵码 2.0 发布会上,阿里云通义实验室自然语言处理方向负责人黄非分享了代码大模型的演进。过去一年来,随着大模型技术的发展,特别是智能体技术的深入应用,通义灵码也在智能体的基础上研发了针对于整个软件研发流程的不同任务的智能体,这里既包括单智能体,也包括多智…

超越 RAG:Memobase 为 AI 应用注入长期记忆丨社区来稿

本文由 RTE 开发者社区成员通过社区网站投稿提供,如果你也有与实时互动(Real-Time Engagement,RTE)相关的项目分享,欢迎访问网站 rtecommunity.dev 发布,优秀项目将会在公众号发布分享。 目录 什么是 AI 记忆?AI 记忆的类型短记忆 vs. 长记忆User Memory vs. Agent Memo…

【vjudge训练记录】大一寒假专项训练——字符串

训练情况A题 第十届中国大学生程序设计竞赛(济南)-(CCPC2024-Jinan)签到题 我们取第一行第一个和后面的进行比较,如果不同的次数超过1次,就说明第一行第一个是不同的那个,如果不同的次数刚好为1次,比较的那个字符串是不同的那个。 #include <bits/stdc++.h> #def…

对于 Blazor 组件虚拟化支持flex-wrap: wrap与网格布局的研究

接上篇文章 Blazor 通过组件虚拟化提高性能 问题 我想使用虚拟化来呈现项目。我使用的是弹性布局,flex-wrap: wrap当宽度完全用完时,我会将这些项目包裹起来( )。第一个项目将按预期呈现(只要您没有触摸滚动条)。开始滚动时,所有项目都会闪烁,并且控件不再可用。<Pa…

Vulnhub-Tr0ll靶机笔记

Tr0ll靶机笔记 概述 靶机地址:https://www.vulnhub.com/entry/tr0ll-1,100/ 这台靶机比较简单,让我们开始 Hack it! 一、nmap扫描 1、端口扫描 sudo nmap -sT --min-rate 10000 -p- 192.168.52.6 -o ports Nmap scan report for 192.168.52.6 Host is up (0.0026s latency).…

1.17 刷题

1 思路 P1331 海战 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)本题难点主要是如何分辨哪些穿是相撞而产生无效,哪些是有效 很容易想到的是,不论是bfs还是dfs都可以轻松全部搜掉,只需要简单的遍历所有点,然后套板子即可 但是这是无法排除无效情况的,也就是相撞的情况 推…

阿里云 Serverless 助力盟主直播:高并发下的稳定性和成本优化

在直播场景中,阿里云 Serverless 应用引擎 SAE 提供的无缝弹性伸缩与极速部署能力,确保直播间高并发时的流畅体验,降低了我们的运营成本,简化了运维流程。结合阿里云云原生数据库 PolarDB 的 Serverless 能力,实现了数据库资源按需自动扩展,在优化成本的同时极大增强了业…

轻松在线将您的照片转化为波普艺术(Pop Art),感受色彩与创意

如果你曾想过将你的照片变成一幅充满活力的波普艺术作品,那么 img4you 提供的这一在线工具,正是帮助你实现创意梦想的最佳选择。波普艺术以其大胆的色彩、夸张的视觉效果,赢得了艺术爱好者和创意工作者的喜爱。现在,你只需上传一张普通照片,选择自己钟爱的波普艺术风格,就…

Qwen2.5 的云端新体验,5 分钟完成极速部署

Qwen2.5 是通义千问团队开发的大规模语言和多模态系列模型,以其长文本处理能力、专业知识集成、大规模数据集预训练以及多语言处理等优势,为用户提供了快速、准确的响应,成为企业智能化转型的有效工具。Qwen2.5 是通义千问团队开发的大规模语言和多模态系列模型,以其长文本…