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

如何在Fabric.js中移除之前添加的矩形对象?

如何在Fabric.js中实现每次点击仅保留新绘制的矩形

嘿,我懂你的需求——现在每次点击都会新增一个矩形,但你想要每次点击时自动移除之前的所有旧矩形,只留下刚画的那个。刚好Fabric.js有两种很贴合它逻辑的实现方式,比原生canvas的clearRect()更灵活:

方法1:跟踪并移除上一个矩形(推荐)

你可以维护一个变量来记录上一次创建的矩形,每次点击时先检查这个变量是否有值,如果有就把它从画布上移除,再创建新的矩形并更新这个变量。这种方法的好处是只删除需要清理的元素,不会影响画布上其他可能存在的元素(比如之后你要加个背景或者其他固定元素的话):

// 用变量存上一次的矩形,初始为空
let lastDrawnRect = null;

canvas.on({
  'mouse:down': function(options) {
    // 如果有旧矩形,先从画布移除它
    if (lastDrawnRect) {
      canvas.remove(lastDrawnRect);
    }
    // 创建新的红色矩形
    const newRect = new fabric.Rect({
      left: options.e.clientX,
      top: options.e.clientY,
      fill: 'red',
      width: 20,
      height: 20
    });
    // 添加到画布
    canvas.add(newRect);
    // 更新变量,把新矩形存起来
    lastDrawnRect = newRect;
    // 手动渲染一下(如果你的画布没开自动渲染的话)
    canvas.renderAll();
  }
});

方法2:直接清空画布后添加新矩形

如果你确定画布上永远只会有这一个矩形,不需要保留其他任何元素,那直接清空整个画布再添加新矩形就好,效果和原生的clearRect()类似:

canvas.on({
  'mouse:down': function(options) {
    // 清空画布上所有元素
    canvas.clear();
    // 创建并添加新矩形
    canvas.add(new fabric.Rect({
      left: options.e.clientX,
      top: options.e.clientY,
      fill: 'red',
      width: 20,
      height: 20
    }));
    // 确保画布更新
    canvas.renderAll();
  }
});

小提醒:Fabric.js默认在添加/移除元素后会自动渲染画布,但如果你的项目里有特殊配置(比如修改了renderOnAddRemove),手动调用canvas.renderAll()能保证界面及时更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:47:11