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

JavaScript Canvas绘制圆形与矩形时图形遮挡问题求助

问题解决:Canvas圆形无法显示的原因及修复

你的圆形无法显示,根本原因不是下方的canvas2遮挡,而是圆形的绘制坐标超出了canvas1的可视范围:

  • canvas1的高度设置为250px,Canvas的坐标原点在左上角,y轴向下延伸,所以canvas1的可视区域y轴范围是0~250。
  • 你绘制圆形时用了ctx.arc(300, 300, 50, 0, 2 * Math.PI),圆心的y坐标是300,已经超出了canvas1的高度,导致整个圆形都在canvas1的可视区域外,自然看不到。

修复方案

方案1:调整canvas1的高度,容纳圆形

修改HTML中canvas1的height属性,让它足够放下圆形:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <!-- 将canvas1的height改为600,足够容纳圆心(300,300)的圆形 -->
  <canvas id="canvas1" width="800" height="600"></canvas>
  <canvas id="canvas2" width="800" height="300"></canvas>
  <script src="index.js"></script>
</body>
</html>

方案2:调整圆形的绘制坐标,移到canvas1可视范围内

修改JavaScript中圆形的圆心坐标,比如移到canvas1的垂直居中位置:

var circle = document.getElementById('canvas1');
var ctx = circle.getContext('2d');
// 将圆心y坐标改为125(canvas1高度250的一半)
ctx.beginPath();
ctx.arc(300, 125, 50, 0, 2 * Math.PI);
ctx.stroke();

var fillColor = 'black';
ctx.fillStyle = fillColor;
ctx.fill();

// 矩形部分代码不变
var rect = document.getElementById('canvas2');
var ctx2 = rect.getContext('2d');
ctx2.beginPath();
ctx2.rect(200, 10, 200, 40);
ctx2.stroke();

var grd2 = ctx2.createLinearGradient(0, 0, 100, 100);
grd2.addColorStop(0, "black");
grd2.addColorStop(1, "white");

ctx2.fillStyle = grd2;
ctx2.fill();

两种方案任选其一,都能让圆形正常显示,和canvas2的位置没有关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 07:53:11