Blazor 是一种使用 C# 和 HTML 构建交互式 Web UI 的框架。要在 Blazor 中不断获得当前窗口的宽度,你可以使用 JavaScript 互操作来调用浏览器的 API,并在窗口大小改变时更新 C# 中的值。
resize
事件,当窗口大小改变时会触发该事件。以下是在 Blazor 中实现不断获得当前窗口宽度的步骤:
wwwroot
目录下的 index.html
文件中添加 JavaScript 函数来获取窗口宽度。<script>
window.getWindowSize = () => {
return {
width: window.innerWidth,
height: window.innerHeight
};
};
window.onWindowResize = (callback) => {
window.addEventListener('resize', () => callback(window.getWindowSize()));
};
</script>
@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 更新
}
}
<script>
window.onWindowResize = (callback) => {
window.addEventListener('resize', () => callback(window.getWindowSize()));
};
</script>
window.innerWidth
的支持有所不同。确保测试在不同浏览器中的表现。以下是一个完整的 Blazor 组件示例,展示了如何实时获取并显示当前窗口宽度:
@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 或执行其他逻辑。
领取专属 10元无门槛券
手把手带您无忧上云