【问题标题】:canvas background turns black after rerender fabric.js重新渲染fabric.js后画布背景变黑
【发布时间】:2018-04-25 20:32:12
【问题描述】:

我有以下情况:我用背景图像绘制画布,这很有效:

var canvasSection = new fabric.Canvas('buildSection', {
  selectionColor: 'rgba(94,213,94,0.2)',
  width: widthS,
  height: heightS,
  hoverCursor: 'pointer',
  backgroundColor: ({
    source: 'image/bordenconfigurator/background/background1.png',
    repeat: 'repeat'
  })

});

但是我需要清除画布并重新绘制它。此时,当我尝试设置背景时,我看到的不是图像而是黑屏。在控制台中,我可以看到背景图像已设置。这是我正在尝试的代码:

$('#cForm').on('change', function() {

  if ($(this).val() == 'rectLandsc') {
    widthS = 600;
    heightS = 400;

  } else if ($(this).val() == 'rectPortr') {
    ....

  }
  canvasSection.clear();

  canvasSection.set({
    fill: 'rgba(0,0,0,0)',
    //  backgroundColor: ({source: 'image/bordenconfigurator/background/background1.png', repeat: 'repeat'})
  });
  //canvasSection.backgroundColor({source: 'image/bordenconfigurator/background/background.png', repeat:'repeat'});
  canvasSection.setBackgroundColor({
      source: 'image/bordenconfigurator/background/background.png'
    }),
    canvasSection.renderAll.bind(canvas);
  drawBaseForm();
  canvasSection.renderAll();

  console.log(canvasSection);
});

这是一种错误吗?还是我做错了什么?有谁能帮帮我吗?

【问题讨论】:

  • 因为你用fill: 'rgba(0,0,0,0)'填充画布

标签: fabricjs


【解决方案1】:
canvas.setBackgroundColor({
  source: 'image/bordenconfigurator/background/background1.png',
  repeat: 'repeat'
}, canvas.renderAll.bind(canvas));

setBackgroundColor 第一个参数是颜色/图案,第二个参数是回调函数。

演示

var canvas = new fabric.Canvas('c');
canvas.setBackgroundColor({
  source: 'http://fabricjs.com/assets/pug_small.jpg'
}, canvas.renderAll.bind(canvas));

function clearCanvas(){
 var background = canvas.backgroundColor;
 canvas.clear();
 setTimeout(function(){
  canvas.setBackgroundColor(background,canvas.renderAll.bind(canvas));
 },2000)
}
canvas{
 border: 2px dotted black;
}
<script src="https://rawgithub.com/kangax/fabric.js/master/dist/fabric.js"></script>
<button onclick='clearCanvas()'>clear</button>
<canvas id="c" width="500" height="500"></canvas>

【讨论】:

  • 我已经尝试过了,但它不起作用。没有设置背景,它是白色的。 (我也在控制台中检查)。在我上面尝试的代码中设置了背景图像,但是在清除画布并再次设置背景后,屏幕背景是黑色而不是图像。
  • 做一个sn-p,我会尽力帮忙的
  • @AleksandraChuprova 检查演示
  • @AleksandraChuprova 这是您更新后的fiddle。图像绘制正确,原因是它变黑了,因为您创建的矩形填充了黑色并且它位于图像的顶部。
  • 非常感谢!现在工作正常。我不知道您可以将填充属性留空以获得透明背景。
猜你喜欢
  • 2023-02-05
  • 2015-06-07
  • 1970-01-01
  • 1970-01-01
  • 2014-01-04
  • 2021-11-26
  • 1970-01-01
  • 1970-01-01
  • 2014-01-03
相关资源
最近更新 更多