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

如何实现点击单选按钮时仅显示对应p5.js绘图?

问题

我创建了一个p5.js绘图程序,预期点击单选按钮可切换绘图内容。点击第一个单选按钮时功能正常,但点击第二个时,之前的绘图仍未消失。请问如何实现点击单选按钮时仅显示当前对应的绘图?

现有代码

HTML

<input type="radio" name="radionbutton" value="one" id="button1" onchange="checkM()"/>
<input type="radio" name="radionbutton" value="two" id="button" onchange="checkS()"/>

JavaScript

var button1 = document.getElementById("button1");
var button2 = document.getElementById("button2");

function drawDonut() {
  console.log("Redrawing our donut!");
  background(218, 24, 132);
}

function checkS(){
  document.getElementById("button").checked;
  circle(200,200,200);
}

function checkM(){
  document.getElementById("button1").checked;
  circle(100,100,100);
}

function setup() {
  myCanvas = createCanvas(400, 400);
  drawDonut();
}

解决方案

问题核心是p5.js的绘图操作会叠加在画布原有内容上,切换时未清空画布。另外代码还有两处小问题:第二个单选按钮ID是button,但JS里尝试获取button2,ID不匹配;checkS()和checkM()里的checked判断没有实际作用。

快速修复方案

修改代码,确保每次绘制新图形前调用background()清空画布,同时修正单选按钮ID匹配问题:

修正后的HTML

<input type="radio" name="radionbutton" value="one" id="button1" onchange="checkM()"/>
<input type="radio" name="radionbutton" value="two" id="button2" onchange="checkS()"/>

修正后的JavaScript

function clearCanvas() {
  background(218, 24, 132);
}

function checkS(){
  clearCanvas();
  circle(200,200,200);
}

function checkM(){
  clearCanvas();
  circle(100,100,100);
}

function setup() {
  createCanvas(400, 400);
  clearCanvas();
}

更符合p5.js规范的方案

推荐利用p5.js的draw()循环,通过状态变量控制绘制内容,代码更易维护:

let currentShape = null;

function setup() {
  createCanvas(400, 400);
  background(218, 24, 132);
  
  // 绑定单选按钮事件
  document.getElementById("button1").addEventListener('change', () => {
    currentShape = 'smallCircle';
  });
  document.getElementById("button2").addEventListener('change', () => {
    currentShape = 'bigCircle';
  });
}

function draw() {
  if (currentShape) {
    background(218, 24, 132);
    switch(currentShape) {
      case 'smallCircle':
        circle(100, 100, 100);
        break;
      case 'bigCircle':
        circle(200, 200, 200);
        break;
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 10:20:31