2017-06-05 20 views
0

キャンバスを作成しようとしています。ユーザーはadd background imageまたはbackground 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プロパティnullまたは0キャンバス(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

関連する問題