2014-09-20 63 views
1

我的帆布上有svg路徑。我想要做這樣的事情: http://jsfiddle.net/tbqrn/基於svg的Fabric.js多重剪輯

var canvas = new fabric.Canvas('c'); 

var ctx = canvas.getContext("2d"); 
ctx.beginPath(); 
ctx.rect(10,10,150,150); 
ctx.rect(180,10,200,200); 
ctx.closePath(); 
ctx.stroke(); 
ctx.clip(); 

fabric.Image.fromURL(img01URL, function(oImg) { 
oImg.scale(.25); 
oImg.left = 50; 
oImg.top = 100; 
canvas.add(oImg); 
canvas.renderAll(); 
}); 

fabric.Image.fromURL(img02URL, function(oImg) { 
oImg.scale(.25); 
oImg.left = 300; 
oImg.top = 100; 
canvas.add(oImg); 
canvas.renderAll(); 
}); 

,但有一點不同:在離開一個區域應立即出現在另一個之後的圖像。 我該怎麼辦?

+0

所以,你需要刪除它們之間的差距? – 2014-09-20 20:29:34

+0

不完全。我希望用戶能夠看到差距,但圖像不應該意識到差距。很難解釋…。 – ats 2014-09-20 21:10:22

+0

我想我明白了。這是你需要的嗎? http://i.imgur.com/SzpMLWB.png – 2014-09-20 21:18:35

回答

1

這不適用於單個畫布。我能想到的唯一辦法是這樣的: 有兩個畫布有兩個不同的圖像,並「同步」它們之間的圖像位置。你實際上必須使用兩個圖像。

HTML:

<canvas id="c1" width="200" height="400"></canvas> 
<canvas id="c2" width="200" height="400"></canvas> 

CSS:

#c1, #c2 { 
    border: 1px solid #ccc; 
} 

#c2 { 
    margin-left: 20px; 
} 

.canvas-container { 
    float: left; 
} 

JS:

var offsetLeft = 220; // #c1 width + #c2 margin-left 

var canvas1 = new fabric.Canvas('c1'); 
var canvas2 = new fabric.Canvas('c2'); 

var c1Img, c2Img; 

fabric.Image.fromURL(img01URL, function(oImg) { 
    c1Img = oImg; 

    c1Img.scale(.25); 
    c1Img.left = 0; 
    c1Img.top = 0; 
    c1Img.hasControls = false; 
    c1Img.hasRotatingPoint = false; 
    canvas1.add(c1Img); 
    canvas1.renderAll(); 
}); 

fabric.Image.fromURL(img01URL, function(oImg) { 
    c2Img = oImg; 

    c2Img.scale(.25); 
    c2Img.left = -offsetLeft; 
    c2Img.top = 0; 
    c2Img.hasControls = false; 
    c2Img.hasRotatingPoint = false; 
    canvas2.add(c2Img); 
    canvas2.renderAll(); 
}); 


canvas1.on('object:moving', function(e) { 
    c2Img.set({left: e.target.left -offsetLeft, top: e.target.top}); 
    c2Img.setCoords(); 
    canvas2.renderAll(); 
             }); 

canvas2.on('object:moving', function(e) { 
    c1Img.set({left: e.target.left + offsetLeft, top: e.target.top}); 
    c1Img.setCoords(); 
    canvas1.renderAll(); 
             }); 

測試在這裏:http://jsfiddle.net/se9sw1d8/2/

+0

謝謝!你的答案是非常有用的,但你是否絕對確信只有一個畫布沒有辦法做到這一點?有時我有2條路徑,有時候4條,而用一條畫布就會容易得多。 – ats 2014-09-29 08:19:30

+0

我想不出一種能夠很好地利用fabricjs內置編輯功能的方法。 – 2014-09-29 08:30:55

+0

一些不同的Javascript庫如何? – ats 2014-10-17 14:09:15