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

Blazor,如何不断获得currentWindow宽度?

Blazor 是一种使用 C# 和 HTML 构建交互式 Web UI 的框架。要在 Blazor 中不断获得当前窗口的宽度,你可以使用 JavaScript 互操作来调用浏览器的 API,并在窗口大小改变时更新 C# 中的值。

基础概念

  • JavaScript 互操作:Blazor 允许你在组件中直接调用 JavaScript 函数,并且也可以从 JavaScript 调用 C# 方法。
  • 窗口大小事件:浏览器提供了一个 resize 事件,当窗口大小改变时会触发该事件。

相关优势

  • 实时响应:能够实时获取窗口宽度的变化,适用于需要根据窗口大小调整布局的应用。
  • 跨平台:Blazor 应用可以在多种设备和浏览器上运行。

类型与应用场景

  • 响应式设计:根据不同的屏幕尺寸调整 UI 布局。
  • 动态内容加载:根据窗口大小动态加载或显示内容。

实现方法

以下是在 Blazor 中实现不断获得当前窗口宽度的步骤:

  1. 创建 JavaScript 函数:在 wwwroot 目录下的 index.html 文件中添加 JavaScript 函数来获取窗口宽度。
代码语言:txt
复制
<script>
    window.getWindowSize = () => {
        return {
            width: window.innerWidth,
            height: window.innerHeight
        };
    };

    window.onWindowResize = (callback) => {
        window.addEventListener('resize', () => callback(window.getWindowSize()));
    };
</script>
  1. 创建 C# 方法:在你的 Blazor 组件中创建一个 C# 方法来调用 JavaScript 函数。
代码语言:txt
复制
@inject IJSRuntime JSRuntime
@code {
    private int currentWidth;

    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        if (firstRender)
        {
            currentWidth = await JSRuntime.InvokeAsync<int>("getWindowSize").Result.width;
            await JSRuntime.InvokeVoidAsync("onWindowResize", DotNetObjectReference.Create(this));
        }
    }

    [JSInvokable]
    public void UpdateWidth(int width)
    {
        currentWidth = width;
        StateHasChanged(); // 通知 Blazor UI 更新
    }
}
  1. 调用 C# 方法:在 JavaScript 中调用 C# 方法来更新宽度。
代码语言:txt
复制
<script>
    window.onWindowResize = (callback) => {
        window.addEventListener('resize', () => callback(window.getWindowSize()));
    };
</script>

遇到的问题及解决方法

  • 性能问题:频繁的窗口大小调整可能导致性能问题。可以通过设置一个防抖(debounce)函数来减少调用频率。
  • 跨浏览器兼容性:不同浏览器可能对 window.innerWidth 的支持有所不同。确保测试在不同浏览器中的表现。

示例代码

以下是一个完整的 Blazor 组件示例,展示了如何实时获取并显示当前窗口宽度:

代码语言:txt
复制
@page "/window-size"
@inject IJSRuntime JSRuntime

<h3>当前窗口宽度: @currentWidth</h3>

@code {
    private int currentWidth;

    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        if (firstRender)
        {
            currentWidth = await JSRuntime.InvokeAsync<int>("getWindowSize").Result.width;
            await JSRuntime.InvokeVoidAsync("onWindowResize", DotNetObjectReference.Create(this));
        }
    }

    [JSInvokable]
    public void UpdateWidth(int width)
    {
        currentWidth = width;
        StateHasChanged();
    }
}

确保在 index.html 中包含了之前定义的 JavaScript 函数。

通过这种方式,你可以确保 Blazor 应用能够实时响应窗口大小的变化,并据此调整 UI 或执行其他逻辑。

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

相关·内容

【炫丽】从0开始做一个WPF+Blazor对话小程序

本文演示如何在WPF中使用Blazor开发漂亮的UI,为客户端开发注入新活力。...GetActiveWindow() { return Application.Current.Windows.Cast().FirstOrDefault(currentWindow...=> currentWindow.IsActive); }}上面的代码用于窗体的最小化、最大化(还原)、关闭等实现,需要在Razor组件里正确的调用这些方法:Counter.razor组件的OnInitialized...webkit-scrollbar { width: 0px;}因为Razor组件是在BlazorWebView里渲染的,即BlazorWebView就是个小型的浏览器呀,上面的样式即把浏览器的滚动条宽度设置为...开源的Blazor组件有:Ant Design Blazor、Bootstrap Blazor、MudBlazor、Blazorise,以及微软自家的FAST Blazor等,当然还有不少开源的Blazor

8.2K60
  • 基于 Blazor 打造一款实时字幕

    ILiveCaptioningProvider Create(); } } 有了这样两个接口,在页面上只要通过ILiveCaptioningProviderFactory创建ILiveCaptioningProvider,然后不断的接收回调展示在页面上即可...在此之前,我们需要确定一下页面展示的预期: 在页面上展示至少两行文本 当一句话超过一行文本的宽度时自动进行换行 当一句话结束时,下一句话自动换行 例如,上面这句话进行连续阅读时,可能会出现如下效果:...add browser 在组件的 url 中填入 http://localhost:5000,并设置一个合适的宽度和高度。 add browser 对着你的话筒话说,字幕就出来了。...WT.mc_id=DX-MVP-5003606 Blazor server 可以通过以下链接来了解,如何通过服务端来推送 UI 变化到前端: https://swimburger.net/blog/dotnet.../pushing-ui-changes-from-blazor-server-to-browser-on-server-raised-events 可以通过以下链接来了解,如何在 UI 线程之外来出发

    1.2K00

    Sentinel基于滑动窗口的流量统计【源码笔记】

    一、问题思考 1.StatisticSlot主要职责是流量统计(为后面插槽链的流控和降级做准备),这些流量是如何统计出来的? 2.统计出来的流量在流控中是如何使用的?...(timeId % array.length()) long timeId = timeMillis / windowLengthInMs 小结:随着时间(time)的向前推进,采样数据下标idx也在不断切换...(由于2个窗口在0和1之间切换);根据下标进而获取采样数据,通过比较当前时间与采样数据中的窗口开始时间,确定当前时间是否属于该滑动窗口以及该采样数据的窗口是否过期;通过不断重置与更新采样数据的值实现统计数据的动态变化...// 代码坐标:LeapArray#currentWindow public WindowWrap currentWindow(long timeMillis) { // 计算数组array...当前时间对应窗口的开始时间windowStart:1570325925000 四、滑动窗口流量数据使用 FlowSlot职责在于比较流控规则与已统计的流量,未达到阀值则放行;达到阀值则触发流控,以此为例跟踪下如何使用滑动窗口统计的流量

    1.9K40

    Blazor 初探

    Blazor 初探 目录 一、新建项目 二、ASP.NET Core Blazor 项目结构 三、结合代码讲解 四、改造 五、配置文件的使用 六、发布到 Linux(CentOS) 题外话,期间遇到个问题...反向代理 七、地址 独立观察员 2021 年 4 月 11 日 上个月发了篇文章《Blazor 中如何下载文件到浏览器》,介绍了调用《下载中转加速器 VPSDownloader.NET(.NET Core...程序部署到 Linux 系统)》中提到的 VPS 文件中转下载服务后,如何将下载的文件以 Blazor 的方式传出到浏览器的方法。...一、新建项目 在 VisualStudio 中选择 “Blazor 应用” 项目模板: 填写项目名称: 选择 Blazor Server 应用: 二、ASP.NET Core Blazor 项目结构...这个继承声明来表明自己布局模板的身份: 可以看到整体布局包括侧边菜单栏和右侧主内容区,主内容区中又分为放关于按钮的顶栏以及实际内容区: 侧边菜单栏由 NavMenu 组件渲染,菜单项中的导航链接是 NavLink 组件: 网页宽度较小时

    2.1K10

    dotnetconf 2024 Agenda Day 1

    developers across various applications. .NET 9 提升了云原生和智能应用程序开发,专注于提高生产力、简化部署和加速 AI 集成,确保开发人员在各种应用程序中获得卓越的性能...了解 Blazor 混合,以及如何在单个代码库中构建适用于 Windows、Mac、iOS 和 Android 的功能齐全的本机应用,从而利用您的 Web 技能。...浏览 .NET 9 中的新 Blazor 混合工具和模板,了解如何重复使用 UI 来构建同时面向 Web 的解决方案。...Copilot 由 GitHub、OpenAI 和 Microsoft 的高级模型提供支持,不断发展。借助 Visual Studio 中的最新更新,.NET 开发人员可以使用更强大的工具。...与 Jeff Fritz、Dee Dee Walsh、Sara Faatz 和更多特邀嘉宾一起参加我们的与会者派对,享受一些乐趣,并从我们的赞助商那里获得奖品。

    6200

    Blazor资源大全,很棒的Blazor(2)

    所有组件都是免费的,并且可以在NuGet上获得。该项目的主要目标是提供一套易于使用、功能丰富的可自定义组件集合和其他有用的扩展。NuGet 演示应用程序 文档。...Blazor是一个强大的框架,用于使用C#构建交互式客户端Web应用程序,当与React的速度和灵活性相结合时,您将获得令人惊叹的高性能Web体验的绝佳组合。...您将在本次会议中品尝到所有美味的风味,并能够做出明智的决策,以获得最佳的开发体验。社区链接。...有不同的模式可以保护此类应用程序,本次演讲涵盖了各种方法的一些问题,特别是考虑到不断变化的浏览器环境。我们将以“前端后端”(或BFF)模式结束,这已成为这些方法中最安全和最稳定的模式。...Blazor贴纸赠送活动 - 2022年7月15日 - 在Visual Studio中尝试新的Blazor指南。继续阅读以了解如何尝试并有机会获得贴纸。

    84020

    自研开源 Blazor 组件库路上,我们解决了这些重要挑战

    因此,到底应该再造轮子还是选择已有工具,选择已有工具时又该如何根据自己的项目需求进行抉择,这其中种种问题对很多团队来说渐渐成为主要挑战。...对于 MASA 技术团队来说,为什么会选择自己研发 UI 组件库,其中趟过了什么坑,获得了怎样的经验?MASA Blazor 又适用于怎样的项目或者场景下?...带着这些问题,InfoQ 特别采访了温州数闪科技 CTO、微软 MVP 谷首道以及温州数闪科技后端开发、MASA Blazor 核心开发者曹尤先。 如何选择 Web UI 框架?...InfoQ:目前看来,您认为 Blazor 的前景如何?...MASA 技术团队:首先,我们认为在开源社区下可以获得更多的反馈,并且赠人玫瑰手留余香的事情我们也是不吝啬去做的。

    2.4K30

    别了,JavaScript;你好,Blazor

    这允许你在同一个应用中利用WebAssembly的性能和威力以及JavaScript的表达力和灵活性,即使你可能并不知道如何编写WebAssembly代码。...经过了3年时间的开发,2020年5月19日在微软年度技术大会Build上正式发布,我们来看一看Blazor将如何改变Web开发。 Blazor是什么?...Blazor 借助于WebAssembly技术 改进这种前后端分离的模式,他有两种模式支持:Blazor WebAssembly 应用和Blazor Server ,个人认为Blazor Webassembly...Blazor让我非常震撼的是它使用起来非常简单。公平地说,我承认Blazor的生态还不够完善,大量的利用前端技术圈的成果的开源项目正在不断涌现。...不仅如此,我其实也很熟悉JavaScript,而且还在不断学习。作为一个工程师,拥有这些技能就有了解决问题的思路。

    3.1K30

    Blazor学习之旅(1)初步了解Blazor

    什么是Blazor? Blazor是微软近年来主推的,基于C#、HTML与CSS来构建交互式Web UI的框架。  借助 Blazor,开发人员可以使用 C# 生成客户端和服务器代码。...Blazor的两种模式 (1)Blazor Server模式 Blazor Server 是 Blazor 用户界面框架(作为 ASP.NET Core Web 开发框架的一部分)的实现,并部署到 Web...Safa 如何选择Blazor两种模式?...微软在官方文档中也给出了如何抉择何时使用Blazor: Blazor 是一种非常棒的用户界面框架,适用于已熟悉 .NET 并且希望获得用于设计和交付基于 HTML 的应用程序的各种选项的开发人员。...综合上述准则,决定在下一个应用程序中使用 Blazor WebAssembly 还是 Blazor Server 时,请参考下表。 Blazor和主流前端框架如何选择?

    96720

    我的博客网站为什么又回归Blazor了

    —文章启智,工具助力 网站技术 网站是基于 Known[5] 的开源项目 KnownCMS[6] 搭建: KnownCMS是基于Blazor开发的一个内容管理系统,前台使用Blazor静态组件,后台使用...静态 SSR 与 Blazor Server 或 Blazor Client(WASM)有着显著的区别,微软文档[8] 的说明: 静态 SSR 是一种独特的运行模式,在服务器处理传入 HTTP 请求时,...其核心在于确保网站内容能够被搜索引擎有效抓取,从而获得更多流量)的前台网站的理想选择。...NET 跨平台客户端框架 - Avalonia UI[16] 的 PR#4[17]: 感谢网友 hjkl950217 (长空X)[18] 总结 在网站的开发历程中,站长不断探索尝试,学习了大量的教程和开源项目...:https://known.org.cn Ant Design Blazor:https://antblazor.com/ Masa Blazor:https://masastack.com/blazor

    6710

    dotnetconf 2024 Agenda Day 4

    Web 开发人员可以使用 AI 支持的主题动态设置 Web UI 组件的样式,或者在浏览器 REPL 中编写 Blazor 代码时获得上下文帮助。...您将学习如何使用各种工具和技术来扫描依赖项、了解常见漏洞并采取主动措施来保护您的 .NET 项目。在本次会议结束时,您将掌握实用策略,以确保您的代码在不断变化的威胁环境中保持安全和最新。...让我们探讨一下新的 .NET 9 功能如何支持您将 AI/LLM 合并到现有 LOB 中,从而在几分钟内获得令人惊叹的结果。...发现下一个级别:LOB 应用程序的智能助手 UI 控件 使用 WinForms Blazor Hybrid 编写图形丰富的高性能聊天助手控件 Exploring the New Fluent UI Blazor...获得有关从云编码、测试和部署应用程序的实用见解,并探索 Visual Studio 和 Dev Box 的最新和最先进的功能。

    4400

    Blazor资源大全,很棒的Blazor(1)

    使用Blazor和C#从头开始构建文本编辑器[52] - YouTube上的一系列视频,介绍如何使用Blazor和.NET从头开始构建自己的IDE。起始点仓库[53] 。...BlazorInAngularDemo[101] - 演示了如何逐步将现有的Angular应用程序逐步迁移到Blazor,包括集成Blazor组件和调用Angular服务方法。演示[102]。...该应用程序使用Blazor实现,并展示了如何在客户端和服务器端模式之间进行切换。演示[147]。...TypinExamples[161] - 一个演示如何在Blazor SPA应用程序中使用Typin[162]框架的示例项目(使用Xterm.js和自定义的C# Web Workers实现在浏览器中模拟终端体验...UpBlazor[166] - - Blazor Server与Up bank(一家澳大利亚数字银行)集成,帮助用户进行预算管理并获得强大的未来洞察力。

    56650

    Blazor带我重玩前端(一)

    写在前面 曾经我和前端朋友聊天的时候,我说我希望有一天可以用C#写前端,不过当时更多的是美好的想象,这一切正变得真实…… 什么是Blazor 我们知道浏览器可以正确解释并执行JavaScript代码,那么浏览器是如何执行...值得一提的是,Blazor是由Browser和Razor这两个单词合并而成的,意思就是Blazor可以基于客户端执行Razor视图后将HTML呈现给浏览器。...Blazor是开源的,其源码位置在GitHub上 ❝另外需要注意的,Blazor和Silverlight不可混为一谈,Blazor是基于开放标准而构建的,本身不需要任何额外插件。...支持 WebAssembly已经获得了大部分浏览器的支持。详细内容可以移步至Can I Use ?...通过以上示例,我们基本上对Blazor和WebAssembly的部分运行机制有了一个比较清晰的认识了,接下来,我们继续讨论有关Blazor的内容。

    1.7K10

    我的博客网站为什么又回归Blazor了

    —文章启智,工具助力 网站技术 网站是基于 Known[5] 的开源项目 KnownCMS[6] 搭建: KnownCMS是基于Blazor开发的一个内容管理系统,前台使用Blazor静态组件,后台使用...静态 SSR 与 Blazor Server 或 Blazor Client(WASM)有着显著的区别,微软文档[8] 的说明: 静态 SSR 是一种独特的运行模式,在服务器处理传入 HTTP 请求时,...其核心在于确保网站内容能够被搜索引擎有效抓取,从而获得更多流量)的前台网站的理想选择。...NET 跨平台客户端框架 - Avalonia UI[16] 的 PR#4[17]: 感谢网友 hjkl950217 (长空X)[18] 总结 在网站的开发历程中,站长不断探索尝试,学习了大量的教程和开源项目...:https://known.org.cn Ant Design Blazor:https://antblazor.com/ Masa Blazor:https://masastack.com/blazor

    9610

    Blazor VS Vue

    Blazor 如何比较?Blazor 是一个框架,它使您能够使用 C# 而不是 JavaScript构建在浏览器中运行的客户端 Web 应用程序。...npm install -g @vue/cli然后创建并启动一个新项目:vue create hello-worldcd hello-worldnpm run serve使用时,vue create您将获得各种预设供您选择...Vue 不知道你如何处理这个问题,让你可以自由地使用本地fetchAPI 或许多第三方库中的任何一个,例如“Axios”。关键是知道何时进行调用,为此 Vue 提供了一个mount生命周期钩子。...请注意我们如何能够使用GetFromJsonAsync,传入一个 Type 来自动将 HTTP 调用的结果反序列化为TicketSummary?...Blazor 组件模型Blazor 缺点新框架,需要时间来适应并获得采用没有明显的方法可以无缝地将 Blazor WASM 添加到现有应用程序中工具也很年轻,将随着时间的推移而发展在撰写本文时,与 Vue

    4.4K30
    领券