新闻中心
Blazor 怎么监听页面大小变化
Blazor通过JS Interop监听window.resize事件:先在JS端注册监听器并调用.NET方法,再在C#组件中定义OnResize回调更新状态并重渲染。

Blazor 本身不直接提供内置的 window.resize 事件绑定机制,但可以通过 J*aScript 互操作(JS Interop)监听浏览器窗口大小变化,并把尺寸数据传回 C# 组件。整个过程分三步:注册 JS 监听器、定义回调方法、在组件中更新状态。
用 JS Interop 注册 resize 监听器
需要在 J*aScript 端设置一个监听函数,在窗口大小变化时调用 .NET 方法。推荐在 `_Host.cshtml` 或 `index.html` 的 `<script>` 中添加: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:js;toolbar:false;'>window.blazorHelpers = { registerResizeListener: (dotNetObjRef) => { const handleResize = () => { dotNetObjRef.invokeMethodAsync('OnResize', window.innerWidth, window.innerHeight); }; window.addEventListener('resize', handleResize); // 立即触发一次,确保初始尺寸正确 handleResize(); // 返回清理函数(可选,用于取消订阅) return () => window.removeEventListener('resize', handleResize); } };</pre></div><H3>在 Blazor 组件中接收并响应尺寸变化 组件里需定义: - 两个字段存宽高(如 `<a style="color:#f60; text-decoration:underline;" title= "win"href="https://www.php.cn/zt/19041.html" target="_blank">windowWidth`, `windowHeight`) - 一个 `IDisposable` 引用(便于后续取消监听) - `[JSInvokable]` 方法 `OnResize` 接收 JS 调用 - 调用 `StateHasChanged()` 触发重渲染 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:razor;toolbar:false;'>@page "/resize-demo" @inject IJSRuntime JSRuntime <p>当前宽度: @windowWidth</p> <div class="aritcle_card"> <a class="aritcle_card_img" href="/ai/895"> <img src="https://img.php.cn/upload/ai_manual/000/000/000/175679995460121.png" alt="晓象AI资讯阅读神器"> </a> <div class="aritcle_card_info"> <a href="/ai/895">晓象AI资讯阅读神器</a> <p>晓象-AI时代的资讯阅读神器</p> <div class=""> <img src="/static/images/card_xiazai.png" alt="晓象AI资讯阅读神器"> <span>72</span> </div> </div> <a href="/ai/895" class="aritcle_card_btn"> <span>查看详情</span> <img src="/static/images/cardxiayige-3.png" alt="晓象AI资讯阅读神器"> </a> </div> <p>当前高度: @windowHeight</p> <button @onclick="StartListening">开始监听</button> <button @onclick="StopListening">停止监听</button> @code { private int windowWidth; private int windowHeight; private IDisposable? resizeListener; private async Task StartListening() { if (resizeListener is null) { resizeListener = await JSRuntime.InvokeUnmarshalled<IDisposable>( "blazorHelpers.registerResizeListener", DotNetObjectReference.Create(this)); } } private void StopListening() { resizeListener?.Dispose(); resizeListener = null; } [JSInvokable] public void OnResize(int width, int height) { windowWidth = width; windowHeight = height; StateHasChanged(); } }</pre></div><H3>注意几个关键细节 - 不要用 `InvokeAsync` 调用 `registerResizeListener`,它返回的是 JS 函数,而 `InvokeUnmarshalled` 更适合这种无 Promise 的同步注册场景 - 初始尺寸必须手动触发一次(比如在 `handleResize()` 里),否则组件首次加载时宽高为 0 - `DotNetObjectReference.Create(this)` 需要手动 `Dispose()`,否则可能引发内存泄漏;建议在 `Dispose(bool)` 中也做清理 - 如果只是做<a style="color:#f60; text-decoration:underline;" title= "响应式布局"href="https://www.php.cn/zt/23291.html" target="_blank">响应式布局判断(比如区分手机/桌面),可在 `OnResize` 里加断点逻辑,例如: <div class="code
" style="position:relative; padding:0px; margin:0px;"><pre class='brush:csharp;toolbar:false;'>public bool IsMobile => windowWidth < 768;
public string DeviceClass => IsMobile ? "mobile" : "desktop";</pre></div><p>基本上就这些。不需要引入第三方包,纯原生 Blazor + JS 互操作就能稳定工作。</script>以上就是Blazor 怎么监听页面大小变化的详细内容,更多请关注其它相关文章!
# 如何用
# 雨花营销网站建设
# 加盟网站推广员加盟费
# 烟台seo公司排行榜
# 郑州网站建设怎么优化
# 玉树抖音seo运营招聘
# 企业网站建设推广公司
# 阜新seo优化咨询热线
# 短视频seo系统源码
# 搜狐号网站建设
# 淘宝关键词排名怎么上去
# 就能
# 几个
# 的是
# 操作指南
# javascript
# 里加
# 如何处理
# 回调
# 它在
# 文档
# .net
# c#
# 响应式布局
# win
# ai
# 浏览器
# js
# html
# java
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
使用J*aScript检测输入元素是否包含在特定类中
css滚动区域卡顿如何改善_css滚动问题用will-change优化渲染
在J*a中如何捕获IndexOutOfBoundsException_索引越界异常防护方法说明
J*aScript数组对象转换:按指定键分组与值收集
理解Python模块与全局变量的作用域管理
VS Code远程开发时如何处理文件权限问题
c++中为什么推荐使用using替代typedef_c++现代化类型别名
Golang如何使用net/url解析URL_Golang URL解析与处理方法
AWS EC2实例间SQL Server连接超时:安全组配置与故障排除指南
QQ邮箱正确登录入口_QQ邮箱官方网站使用地址
C++ typeid如何获取类型信息_C++ RTTI运行时类型识别用法
Composer的 archive 命令怎么用_快速打包你的PHP项目及其Composer依赖
PySpark中从现有列右侧提取可变长度字符创建新列的教程
提升屏幕阅读器对“m”时间单位的播报准确性:HTML与CSS组合解决方案
Lar*el 递归关系中排除指定分支的教程
俄罗斯方块最新版入口 俄罗斯方块在线玩官网入口
QQ邮箱官方登录入口_QQ邮箱网页版快捷使用平台
照顾宝贝2小游戏点击立即在线玩
UC浏览器官网入口2025最新 UC浏览器网页版正式地址
poki网页游戏推荐_poki免费游戏平台入口
怎样在Excel中做仪表盘_Excel仪表盘设计与关键指标展示方法
利用Bokeh CustomJS动态控制DataTable列可见性
虫虫漫画精品漫画官网_虫虫漫画精品漫画官网进入精品漫画
Log4j Console Appender性能瓶颈与高并发优化策略
Sublime怎么配置Nim语言环境_Sublime Nim代码高亮与补全
谷歌邮箱注册显示错误Gmail服务器异常与延迟处理
Django表单提交验证失败后保持字段值不刷新
痛风发作了怎么办? 快速止痛和后期饮食调理
Django表单验证失败时保留用户输入数据的最佳实践
QQ邮箱登录平台入口 QQ邮箱网页版邮箱官方入口
使用CSS更改登录屏幕输入框中PNG图标颜色的策略与局限性
J*a如何使用AtomicInteger控制计数_J*a无锁计数器性能分析
Win10如何清理注册表垃圾 Win10手动清理无效注册表【技巧】
如何提高微信支付的安全性_微信支付安全防护与设置建议
漫蛙Manwa2官网入口地址分享 漫蛙漫画PC版永久访问通道
Pandas DataFrame 多条件优先级排序与排名
J*aScript实现单选按钮与关联输入框的联动禁用教程
2306选座时如何选靠窗位置_12306选座靠窗座位查看方法解析
抖音小游戏合成大西瓜免费秒玩入口链接 抖音小游戏热门合集秒玩网站
126邮箱账号注册 电脑版登录入口
微信语音通话掉线如何解决 微信语音通话稳定优化方法
解决 Express.js 中 PUT 请求密码修改失败的路由配置指南
4399免费游戏网址入口 4399小游戏免费入口点开即玩
漫蛙2(台版)官方入口地址 漫蛙2(台版)正版漫画网页端
HTML长属性值处理:表单action路径优化与代码规范应对
苹果手机如何防止被恶意App追踪
在J*a中如何使用Exception包装底层异常_异常包装与信息传递方法说明
邮政编码查询不到怎么办_邮政编码查询不到的常见原因与对策
Node.js CSV 数据处理:基于字段空值条件过滤整条记录的策略
哔哩哔哩忘记密码了怎么找回_哔哩哔哩密码找回方法


2025-12-16
浏览次数:次
返回列表