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

HTML Canvas全屏问题求助:Carrom游戏绘图错乱

解决Canvas全屏绘制错乱的方案
  • 同步Canvas的实际尺寸与显示尺寸
    Canvas有两个核心尺寸:元素自身的width/height属性(决定绘图缓冲区的像素大小),以及CSS设置的width/height(决定页面上的显示大小)。全屏切换时如果只修改CSS尺寸、未同步更新属性值,会直接导致绘制内容拉伸、错位。要在全屏状态变化时监听事件,同步两者并重新绘制:

    function resizeCanvas() {
      const canvas = document.getElementById('your-canvas-id');
      // 匹配显示区域的实际像素尺寸
      canvas.width = window.innerWidth;
      canvas.height = window.innerHeight;
      // 重新渲染棋盘
      drawCarromBoard();
    }
    
    // 监听全屏切换事件
    document.addEventListener('fullscreenchange', resizeCanvas);
    // 同时监听窗口缩放,适配普通窗口尺寸变化
    window.addEventListener('resize', resizeCanvas);
    
  • 适配比例的棋盘绘制逻辑
    全屏后窗口宽高比会变化,要保证棋盘按原比例显示、避免变形。可以以窗口较短边为基准计算缩放比例,同时让棋盘居中:

    function drawCarromBoard() {
      const canvas = document.getElementById('your-canvas-id');
      const ctx = canvas.getContext('2d');
      // 取窗口短边的90%作为棋盘显示尺寸,留边距避免贴边
      const boardDisplaySize = Math.min(canvas.width, canvas.height) * 0.9;
      const xOffset = (canvas.width - boardDisplaySize) / 2;
      const yOffset = (canvas.height - boardDisplaySize) / 2;
      // 假设你设计的原始棋盘尺寸为800x800,可替换为实际值
      const originalBoardSize = 800;
      const scaleRatio = boardDisplaySize / originalBoardSize;
    
      // 清空画布
      ctx.clearRect(0, 0, canvas.width, canvas.height);
      // 保存当前绘图上下文状态
      ctx.save();
      // 平移到居中位置
      ctx.translate(xOffset, yOffset);
      // 按比例缩放绘图坐标系
      ctx.scale(scaleRatio, scaleRatio);
      
      // 这里执行你的棋盘绘制逻辑,比如绘制边框、圆心等
      // drawBoardBorder();
      // drawCenterCircle();
    
      // 恢复上下文初始状态
      ctx.restore();
    }
    
  • 处理F11全屏的延迟问题
    部分浏览器在F11触发全屏时,窗口尺寸的更新会有短暂延迟,导致直接获取的尺寸不准确。可以给resize操作加个短延迟:

    document.addEventListener('fullscreenchange', () => {
      setTimeout(resizeCanvas, 100);
    });
    
  • 排查硬编码的固定坐标
    如果绘制代码里用了固定像素值(比如ctx.fillRect(50, 50, 100, 100)),全屏后这些固定坐标会偏离预期位置。要把所有绘制坐标改成基于Canvas当前尺寸的相对计算值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:15:43