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

Fabric.js 背景图案仅在调整画布缩放值后才显示的问题如何解决

问题原因

你遇到的现象本质是外部图片资源异步加载导致的时序问题:直接传入url创建fabric.Pattern时,图片还未完成下载初始化,Pattern的实际宽高参数为空,首次调用renderAll时无法正确渲染背景。缩放操作会触发画布的强制重绘,此时图片已经加载完成,所以背景会正常显示。

操作问题

你没有等待图片资源加载完成就直接创建Pattern并设置背景,属于时序逻辑疏漏。

修复方案

先预加载图片,等资源加载完成后再执行背景设置操作,有两种常用实现方式:

  1. 原生Image预加载
const bgImg = new Image();
// 跨域公共图片需要添加跨域配置,避免后续画布导出时报污染错误
bgImg.crossOrigin = 'anonymous';
bgImg.src = 'https://cdn.pixabay.com/photo/2016/02/20/02/21/colorful-1211510_960_720.png';
bgImg.onload = () => {
  this.canvas.setBackgroundColor(new fabric.Pattern({
    source: bgImg,
    repeat: 'repeat'
  }), () => {
    this.canvas.renderAll();
  });
};
  1. 用fabric内置工具方法加载,代码更简洁
fabric.util.loadImage(
  'https://cdn.pixabay.com/photo/2016/02/20/02/21/colorful-1211510_960_720.png',
  (img) => {
    this.canvas.setBackgroundColor(new fabric.Pattern({
      source: img,
      repeat: 'repeat'
    }), () => this.canvas.renderAll());
  },
  { crossOrigin: 'anonymous' }
);

如果使用的是本地无跨域限制的图片,可以去掉crossOrigin相关配置。


内容的提问来源于stack exchange,提问作者Fede Dávila

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:06:05