You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过JavaScript获取Blazor页面(不含侧边菜单)的尺寸?

解决Blazor中获取不含侧边栏的页面宽高设置Canvas尺寸问题

针对默认Blazor模板带左侧菜单栏的场景,你需要获取Canvas所在的主内容区域尺寸而非整个窗口尺寸,以下是两种可行方案:

方案1:直接获取默认模板的主内容容器尺寸

默认Blazor模板的主内容区域通常是<main>标签,直接在JS中获取该元素的clientWidth和clientHeight即可得到不含侧边栏的可用空间:

修改你的JavaScript代码:

function SetCanvasSize(element) {
    // 获取默认模板的主内容容器
    const mainContent = document.querySelector('main');
    if (!mainContent) return;

    const usableWidth = mainContent.clientWidth;
    const usableHeight = mainContent.clientHeight;

    // 设置Canvas的实际绘制尺寸
    element.width = usableWidth;
    element.height = usableHeight;

    const ctx = element.getContext('2d');
    // 测试绘制:画一个边框验证尺寸
    ctx.strokeStyle = '#000';
    ctx.strokeRect(0, 0, usableWidth - 1, usableHeight - 1);

    console.log('可用宽度:', usableWidth, '可用高度:', usableHeight);
}

方案2:传递Canvas父容器引用(更灵活)

如果Canvas放在自定义容器中,或者模板结构有调整,可以在Blazor中获取父容器的引用,传给JS来获取尺寸:

Blazor页面HTML部分

@page "/canvas_test1"
@inject IJSRuntime JsRuntime

<!-- 给Canvas包裹一层容器,并获取引用 -->
<div @ref="canvasContainer" style="width:100%;height:100%;">
    <canvas @ref="canvas1"></canvas>
</div>
<button @onclick="SetCanvasSize">Set canvas size</button>

Blazor代码部分

ElementReference canvas1;
ElementReference canvasContainer;

async Task SetCanvasSize()
{
    // 同时传递Canvas和父容器引用给JS
    await JsRuntime.InvokeVoidAsync("SetCanvasSize", canvas1, canvasContainer);
}

对应的JavaScript代码

function SetCanvasSize(canvasElement, containerElement) {
    const containerWidth = containerElement.clientWidth;
    const containerHeight = containerElement.clientHeight;

    canvasElement.width = containerWidth;
    canvasElement.height = containerHeight;

    const ctx = canvasElement.getContext('2d');
    ctx.strokeRect(0, 0, containerWidth - 1, containerHeight - 1);

    console.log('容器宽度:', containerWidth, '容器高度:', containerHeight);
}

额外优化:监听窗口大小变化

如果需要在窗口缩放时自动更新Canvas尺寸,可以在JS中添加resize事件监听:

// 页面加载完成后绑定监听
window.addEventListener('load', () => {
    const canvas = document.querySelector('canvas');
    if (!canvas) return;

    function updateCanvasSize() {
        const mainContent = document.querySelector('main');
        canvas.width = mainContent.clientWidth;
        canvas.height = mainContent.clientHeight;
        // 这里可以重新绘制Canvas内容
    }

    // 初始设置一次
    updateCanvasSize();
    // 窗口缩放时更新
    window.addEventListener('resize', updateCanvasSize);
});

内容的提问来源于stack exchange,提问作者Bert54

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 01:15:29