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

如何在Fabric中实现线条绘制动画?

在Fabric.js中实现线条延伸动画(铅笔绘制效果)

嗨,我懂你想要的那种像铅笔慢慢画出线条的动画效果!之前你用animate修改left属性只会让整条线平移,这是因为Fabric.js里的Line对象,真正控制线条端点位置的是x1、y1、x2、y2这四个属性,而left和top只是整个线条的偏移定位量,和端点延伸完全没关系~

正确的实现思路

要实现端点延伸的动画,我们需要直接对线条的终点(x2、y2)或者起点(x1、y1)属性做动画,这样就能模拟出线条逐步绘制的效果。

代码示例

1. 从零开始绘制线条(从点到线)

先创建一个初始为“点”的线条,然后动画让终点延伸到目标位置:

// 初始化画布(假设你已经创建了canvas实例)
var canvas = new fabric.Canvas('yourCanvasId');

// 创建初始线条:起点和终点重合,初始显示为一个点
var drawingLine = new fabric.Line([50, 100, 50, 100], {
  stroke: 'red',
  strokeWidth: 2, // 增加线宽让动画更明显
  selectable: false // 可选,避免动画过程中被选中干扰
});
canvas.add(drawingLine);

// 执行延伸动画:让终点从(50,100)移动到(200,200)
drawingLine.animate({
  x2: 200,
  y2: 200
}, {
  onChange: canvas.renderAll.bind(canvas), // 每次属性变化后重新渲染画布
  duration: 3000, // 动画时长3秒
  easing: fabric.util.ease.easeInOutQuad // 可选,添加缓动效果让动画更自然
});

2. 从已有线条延伸到下一个点

如果你的线条已经有初始的端点,只需要继续动画目标终点的坐标即可:

// 假设已有一条初始线条
var existingLine = new fabric.Line([50, 100, 100, 150], {
  stroke: 'red',
  strokeWidth: 2
});
canvas.add(existingLine);

// 延伸到新的终点(200,200)
existingLine.animate({
  x2: 200,
  y2: 200
}, {
  onChange: canvas.renderAll.bind(canvas),
  duration: 2000
});

关键注意点

  • 不要混淆left/top和x1/y1/x2/y2:前者是线条整体的偏移,后者才是控制端点位置的核心属性
  • 必须在animate的配置里加上onChange: canvas.renderAll.bind(canvas),否则画布不会实时更新动画状态
  • 可以通过fabric.util.ease里的缓动函数,让动画效果更贴近真实手绘的感觉

内容的提问来源于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.27 03:37:22