阻止渲染 fabric-js canvas 直到完全填充
Prevent render of fabric-js canvas until fully populated
在 FabricJS 中 canvas.loadFromJSON() 似乎 运行 某种 renderAll 函数,即使没有指定?由于我既要从 JSON 加载图像,又要从另一个函数加载一些图像,所以我希望 canvas 保持空白,直到加载所有内容,然后同时渲染所有内容。
我创建了一个简短的 fiddle 简化版本:https://jsfiddle.net/Xikura/cas6j7b3/168/
fiddle 切换其中一层然后重绘 canvas,特别是如果您禁用缓存,您可以看到道具自己显示,然后图像的其余部分有点之后。
有人可能会说相当小,但是当有 10 到 30 个具有各种混合设置的图像时,加载可能需要一些时间,直到开始缓存普通图像,在早期可见的道具上移动对我的解决方案没有多大好处...
我看到 documentation of loadFromJSON 在它的回调中添加了 renderAll(),我在同一个回调中触发了我自己的预加载图像,以便能够添加其他图像。
if (!jsonCanvas) {
// First load
preload(images);
} else {
// Loading from saved JSON
canvas.loadFromJSON(jsonCanvas, function () {
preload(images);
});
}
现在我似乎无法理解为什么 loadFromJSON 似乎触发了某种渲染,所以道具首先显示?在我自己使用 renderAll() 触发渲染之前,FabricJS 是否具有我可以用来阻止渲染的任何功能?
我找到了 FabricJS 设置,人们认为它可以解决这个问题:renderOnAddRemove 我将其设置为 false,它确实解决了我之前遇到的其他一些渲染问题,但对 loadFrom[ 没有影响=32=]-part.
所以我整天都在研究这个问题,但在完成我的问题后,我决定休息一下,继续解决其他问题。在尝试优化我的应用程序的性能时,我偶然发现了这个 Improving FabricJS speed 站点,它既回答了我的问题又解决了我的问题。
通过将 loadFromJSON 切换为 fabric.util.enlivenObjects 我能够触发我自己的回调而不是(未记录? ) canvas.renderAll() loadFromJSON 调用。
if (!jsonCanvas) {
// First load
preload(images);
} else {
// Loading from saved JSON
fabric.util.enlivenObjects(jsonCanvas.objects, (objs) => {
objs.forEach((item) => {
canvas.add(item);
});
preload(images);
})
}
我更新了 my fiddle 以包含此修复程序。
在 FabricJS 中 canvas.loadFromJSON() 似乎 运行 某种 renderAll 函数,即使没有指定?由于我既要从 JSON 加载图像,又要从另一个函数加载一些图像,所以我希望 canvas 保持空白,直到加载所有内容,然后同时渲染所有内容。
我创建了一个简短的 fiddle 简化版本:https://jsfiddle.net/Xikura/cas6j7b3/168/
fiddle 切换其中一层然后重绘 canvas,特别是如果您禁用缓存,您可以看到道具自己显示,然后图像的其余部分有点之后。 有人可能会说相当小,但是当有 10 到 30 个具有各种混合设置的图像时,加载可能需要一些时间,直到开始缓存普通图像,在早期可见的道具上移动对我的解决方案没有多大好处...
我看到 documentation of loadFromJSON 在它的回调中添加了 renderAll(),我在同一个回调中触发了我自己的预加载图像,以便能够添加其他图像。
if (!jsonCanvas) {
// First load
preload(images);
} else {
// Loading from saved JSON
canvas.loadFromJSON(jsonCanvas, function () {
preload(images);
});
}
现在我似乎无法理解为什么 loadFromJSON 似乎触发了某种渲染,所以道具首先显示?在我自己使用 renderAll() 触发渲染之前,FabricJS 是否具有我可以用来阻止渲染的任何功能?
我找到了 FabricJS 设置,人们认为它可以解决这个问题:renderOnAddRemove 我将其设置为 false,它确实解决了我之前遇到的其他一些渲染问题,但对 loadFrom[ 没有影响=32=]-part.
所以我整天都在研究这个问题,但在完成我的问题后,我决定休息一下,继续解决其他问题。在尝试优化我的应用程序的性能时,我偶然发现了这个 Improving FabricJS speed 站点,它既回答了我的问题又解决了我的问题。
通过将 loadFromJSON 切换为 fabric.util.enlivenObjects 我能够触发我自己的回调而不是(未记录? ) canvas.renderAll() loadFromJSON 调用。
if (!jsonCanvas) {
// First load
preload(images);
} else {
// Loading from saved JSON
fabric.util.enlivenObjects(jsonCanvas.objects, (objs) => {
objs.forEach((item) => {
canvas.add(item);
});
preload(images);
})
}
我更新了 my fiddle 以包含此修复程序。