加载含Image的JSON后,Fabric.js新增TextBox无法显示的问题排查
问题原因分析
核心问题在于Fabric.js加载含图片的JSON时,图片资源是异步加载的,你添加fabric.Textbox的代码是同步执行的,导致文本框的渲染时机和画布的异步加载流程冲突:
- 加载包含矩形(Rect)的JSON时,所有元素都是纯数据,
canvas.loadFromJSON会同步完成解析和渲染,后续添加的文本框能正常被画布捕获并渲染。 - 加载包含图片(Image)的JSON时,图片资源需要异步加载,
canvas.loadFromJSON先解析JSON结构,再后台加载图片。此时同步执行的canvas.add(textbox)虽把文本框加入画布,但画布正处于等待图片加载的状态,后续重绘流程没正确包含这个新元素。
解决方法是把添加文本框的逻辑放到loadFromJSON的回调函数里,确保所有异步资源加载完成后再添加元素:
canvas.loadFromJSON(jsonWithImage, function() { // 所有资源加载完成后执行 const textbox = new fabric.Textbox('测试文本', { left: 100, top: 100, width: 200 }); canvas.add(textbox); canvas.renderAll(); // 手动触发重绘确保显示 });
内容的提问来源于stack exchange,提问作者MyDaftQuestions
相关产品推荐
相关产品推荐

