ClipPaths bersarang
Satu masalah clipTo dan penggunaan canvas.clip() ialah anda tidak boleh mempunyai lebih daripada satu clipPath pada masa.
Dengan pelaksanaan ini clippaths boleh mempunyai clippaths sendiri. Walaupun ini kurang intuitif untuk memprogram secara manual, ia membolehkan untuk bersilang clipPaths bersama-sama.
(function() {
var canvas = new fabric.Canvas('ex4');
var clipPath = new fabric.Circle({ radius: 70, top: -50, left: -50 });
var innerClipPath = new fabric.Circle({ radius: 70, top: -90, left: -90 });
clipPath.clipPath = innerClipPath;
var group = new fabric.Group([
new fabric.Rect({ width: 100, height: 100, fill: 'red' }),
new fabric.Rect({ width: 100, height: 100, fill: 'yellow', left: 100 }),
new fabric.Rect({ width: 100, height: 100, fill: 'blue', top: 100 }),
new fabric.Rect({ width: 100, height: 100, fill: 'green', left: 100, top: 100 })
]);
group.clipPath = clipPath;
canvas.add(group);
})()
ClipPaths dalam objek dalam kumpulan harus diasingkan daripada clipPath kumpulan itu sendiri:
(function() {
var canvas = new fabric.Canvas('ex5');
var clipPath = new fabric.Circle({ radius: 100, top: -100, left: -100 });
var small = new fabric.Circle({ radius: 50, top: -50, left: -50 });
var group = new fabric.Group([
new fabric.Rect({ width: 100, height: 100, fill: 'red', clipPath: small }),
new fabric.Rect({ width: 100, height: 100, fill: 'yellow', left: 100 }),
new fabric.Rect({ width: 100, height: 100, fill: 'blue', top: 100 }),
new fabric.Rect({ width: 100, height: 100, fill: 'green', left: 100, top: 100 })
]);
group.clipPath = clipPath;
canvas.add(group);
})()
Keratan dengan Teks
Keratan dengan teks tidak boleh dilakukan dengan clipTo juga, dev biasanya terpaksa berundur pada corak untuk itu
(function() {
var canvas = new fabric.Canvas('ex6');
var clipPath = new fabric.Text(
'Hi I\'m the \nnew ClipPath!\nI hope we\'ll\nbe friends',
{ top: -100, left: -100 });
var group = new fabric.Group([
new fabric.Rect({ width: 100, height: 100, fill: 'red' }),
new fabric.Rect({ width: 100, height: 100, fill: 'yellow', left: 100 }),
new fabric.Rect({ width: 100, height: 100, fill: 'blue', top: 100 }),
new fabric.Rect({ width: 100, height: 100, fill: 'green', left: 100, top: 100 })
]);
group.clipPath = clipPath;
canvas.add(group);
})()