2017-06-05 90 views
0

我正在尝试创建一个画布,其中用户可以在其上使用add background imagebackground color and write a text。但是,当背景图像存在时,我无法显示背景颜色。我创建了一个小提琴来展示一个例子。您可以尝试添加图像并在小提琴中添加颜色按钮。当有图像时不显示背景颜色

http://jsbin.com/sukuvoqahi/edit?html,js,output

这里是我的代码

const canvasRef = new fabric.Canvas('canvas'); 

const addImage = document.querySelector('#addImage'); 

const addBackgroundColor = document.querySelector('#addBackgroundColor'); 

addImage.addEventListener('click', (e) => { 
    e.preventDefault(); 
    console.log('image'); 
    canvasRef.setBackgroundImage('https://www.cesarsway.com/sites/newcesarsway/files/styles/large_article_preview/public/Common-dog-behaviors-explained.jpg',() => { 
    canvasRef.renderAll(); 
    }); 
}); 

addBackgroundColor.addEventListener('click', (e) => { 
    e.preventDefault(); 
    console.log('color'); 
    canvasRef.setBackgroundColor('rgb(100,100,100)',() => { 
    canvasRef.renderAll(); 
    }) 
}); 
+1

好了,这是正常的。您的背景图片很大,因此它覆盖了背景颜色。你想达到什么目的? – Huangism

+0

我想在图像顶部显示背景颜色,而不是图像顶部的颜色。 – milan

+0

我尝试清除画布上的图像,并选择颜色时显示背景颜色,但这也不起作用。你可以看到pablo.buffer.com在选择颜色时用颜色代替背景图像。这就是我想要的,这是没有发生的。 – milan

回答

1

设置backgroundImage属性null0在画布(canvasRef),在设置背景颜色之前...

const canvasRef = new fabric.Canvas('canvas'); 
 

 
const addImage = document.querySelector('#addImage'); 
 

 
const addBackgroundColor = document.querySelector('#addBackgroundColor'); 
 

 
addImage.addEventListener('click', (e) => { 
 
    e.preventDefault(); 
 
    console.log('image'); 
 
    canvasRef.setBackgroundImage('https://www.cesarsway.com/sites/newcesarsway/files/styles/large_article_preview/public/Common-dog-behaviors-explained.jpg',() => { 
 
     canvasRef.renderAll(); 
 
    }); 
 
}); 
 

 
addBackgroundColor.addEventListener('click', (e) => { 
 
    e.preventDefault(); 
 
    console.log('color'); 
 
    canvasRef.backgroundImage = null; //or set 0 
 
    canvasRef.setBackgroundColor('rgb(100,100,100)',() => { 
 
     canvasRef.renderAll(); 
 
    }) 
 
});
<canvas id="canvas" width="350" height="350" style="border:1px solid #000000"> 
 
</canvas> 
 
<button id="addImage">Add Image</button> 
 
<button id="addBackgroundColor">Add Color</button> 
 
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> 
 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.11/fabric.min.js"></script>

+1

我不认为这是最好的方法。在我的理解中,'canvasRef.clear()'清除整个画布对象。如果我有上面的图像文字,我想要背景颜色而不是图像,那么'canvasRef.clear()'不仅会清除图像,而且还会清除文字,我想。 – milan

+1

是的,你是对的,那会清除整个画布。你的方法*(上面评论)*将成为去的方式:) –

+1

感谢您的帮助。我正在将您的答案标记为已解决且有帮助。 – milan

1

只需卸下化背景图片。
我是FabricJS的新手,所以我不确定这是否是最好的方法。
但这种方法似乎工作:

canvasRef.setBackgroundImage(null) => { 
    canvasRef.renderAll(); 
}); 
canvasRef.setBackgroundColor('rgb(100,100,100)',() => { 
    canvasRef.renderAll(); 
}); 

这里是一个工作演示:
JSBin