2017-06-05 88 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