Javascript renderAll()在fabric.js中不起作用
我用fabric.js在画布上绘制了一栋建筑的六层。为了只显示一个楼层,我执行以下操作:Javascript renderAll()在fabric.js中不起作用,javascript,canvas,fabricjs,Javascript,Canvas,Fabricjs,我用fabric.js在画布上绘制了一栋建筑的六层。为了只显示一个楼层,我执行以下操作: building.selectFloor = function(floorId){ for (var i = 0; i < floors.length; i++){ if (floorId == floors[i].name){ floors[i].visible = true; }else{ floors[i]
building.selectFloor = function(floorId){
for (var i = 0; i < floors.length; i++){
if (floorId == floors[i].name){
floors[i].visible = true;
}else{
floors[i].visible = false;
}
}
canvas.renderAll();
};
但它们确实消失了。为什么一个renderAll()工作,而另一个不工作?我尝试将不起作用的renderAll()包装在window.timeOut中,以查看延迟是否有帮助,但没有成功。好-因此我最终找到了答案:
building
是一个组,它似乎被某种内部结构魔法缓存,缓存的版本正在被渲染,而不是更新的版本。要呈现更新版本,必须执行以下操作
canvas.building.set('dirty', true);
canvas.renderAll();
希望这能帮到其他人
编辑
事实证明还有一个更简单的解决方案:
canvas.building.objectCaching = false
有一个新版本将格式更改为:
canvas.requestRenderAll();
这在以后的版本中对我有效:
//对于一个画布
myCanvas.objectCaching=false;
//所有画布
fabric.Object.prototype.objectCaching=false;
//在这两种情况下,仍然需要重新渲染
myCanvas.renderAll();
ps:使用版本4.2.0canvas.building.objectCaching=false-->有关此操作的详细信息,请参见:
canvas.requestRenderAll();