【问题标题】:Event Handling for different screen sizes in Blazor WasmBlazor Wasm 中不同屏幕尺寸的事件处理
【发布时间】:2021-04-15 22:25:53
【问题描述】:

Blazor WASM 客户端应用程序需要在 Web 浏览器屏幕上具有某些菜单项的悬停事件,并在平板电脑大小的屏幕上具有单击事件。为了接收浏览器屏幕的宽度,使用 js 互操作和额外的浏览器服务(类似于https://blazor.tips/blazor-how-to-ready-window-dimensions/ 中的方法)来获取宽度并在事件处理中应用条件。但是,如果此 Blazor 应用程序最初是在 Web 浏览器上加载的(比如 >1000 像素的屏幕具有悬停事件)并且当调整为标签宽度时(比如

是否有任何替代方法可以将屏幕宽度的动态变化读取到 Blazor 应用程序中的组件中?

注意: 有一种方法可以使用 BlazorPro 检测屏幕尺寸。 BlazorSize 包https://github.com/EdCharbeneau/BlazorSize 但不幸的是,它对我不起作用

【问题讨论】:

  • 您可以从 Javascript 调用 Blazor 方法。因此,在 JS 中读取您更改的尺寸,并通过方法调用发送它。
  • 谢谢@Bennyboy1973,但是有没有办法不从 blazor 调用 javascript 方法来处理此页面上发生的每个事件。因为有 7-8 个按钮具有大屏幕的悬停事件和小屏幕的单击事件,我正在尝试以有效的方式编写代码。
  • 您不需要从 Blazor 调用 Javascript。您需要在调用 Blazor 方法的 javascript 中有一个 window.resize 事件处理程序。
  • 或者,您可以填充隐藏的输入字段并在 window.resize 处理程序内触发其 onchange 事件。然后,您可以像往常一样在 Blazor 中处理 onchange 事件,而无需使用 Interop 调用。
  • 标签: javascript blazor-webassembly blazor-jsinterop


    【解决方案1】:

    避免此问题的一种方法是在来自 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://docs.microsoft.com/en-us/aspnet/core/blazor/webassembly-performance-best-practices?view=aspnetcore-5.0

    https://www.meziantou.net/optimizing-js-interop-in-a-blazor-webassembly-application.htm

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签