问题描述
Blazor WASM 客户端应用程序需要在 Web 浏览器屏幕上具有某些菜单项的悬停事件,并在平板电脑大小的屏幕上具有单击事件。为了接收浏览器屏幕宽度,使用 js 互操作和额外的浏览器服务(类似于 https://blazor.tips/blazor-how-to-ready-window-dimensions/ 中的方法)来获取宽度并在事件处理中应用条件。但是,如果此 Blazor 应用程序最初加载到 Web 浏览器上(例如具有悬停事件的 >1000 像素屏幕)并且在调整为选项卡宽度时(例如具有相同菜单的单击事件的
是否有其他方法可以将屏幕宽度的动态变化读入到 Blazor App 中的组件中?
注意: 有一种方法可以使用 BlazorPro 检测屏幕尺寸。 BlazorSize 包 https://github.com/EdCharbeneau/BlazorSize 但不幸的是,它对我不起作用
解决方法
避免此问题的一种方法是在来自 Blazor 的按钮单击事件中进行同步 js 调用(通过使用 IJSInProcessRuntime)(通常 JSRuntime 是一种异步方法),以便屏幕上不会有任何等待时间看看结果。
在以下链接中检查如何同步调用 JavaScript 函数 https://docs.microsoft.com/en-us/aspnet/core/blazor/call-javascript-from-dotnet?view=aspnetcore-3.1#invoke-net-methods-from-javascript-functions
https://www.meziantou.net/optimizing-js-interop-in-a-blazor-webassembly-application.htm