Mentre la risposta di Orangepill è corretta, produce un "balbuzie" quando l'oggetto colpisce i limiti di oggetto. Se si dispone di un riquadro di delimitazione rettangolare (e non di un oggetto di delimitazione complesso) un'alternativa è consentire all'oggetto di essere trascinato lungo i limiti e "scorrere" lungo il riquadro di delimitazione. Lo fai limitando i valori delle coordinate e lasciando che l'altra dimensione si muova come al solito. Un frammento di esempio apparirebbe in questo modo:
var canvas = new fabric.Canvas("bounded");
var boundingBox = new fabric.Rect({
fill: "none",
width: 600,
height: 400,
hasBorders: false,
hasControls: false,
lockMovementX: true,
lockMovementY: true,
evented: false,
stroke: "red"
});
var movingBox = new fabric.Rect({
width: 100,
height: 100,
hasBorders: false,
hasControls: false
});
canvas.on("object:moving", function() {
var top = movingBox.top;
var bottom = top + movingBox.height;
var left = movingBox.left;
var right = left + movingBox.width;
var topBound = boundingBox.top;
var bottomBound = topBound + boundingBox.height;
var leftBound = boundingBox.left;
var rightBound = leftBound + boundingBox.width;
// capping logic here
movingBox.setLeft(Math.min(Math.max(left, leftBound), rightBound - movingBox.width));
movingBox.setTop(Math.min(Math.max(top, topBound), bottomBound - movingBox.height));
});
canvas.add(boundingBox);
canvas.add(movingBox);
See this example in JSFiddle here
fonte
2014-03-14 22:07:19
Sto usando fabric js e ho solo bisogno di visualizzare il riquadro di delimitazione di un oggetto, non l'intero oggetto durante il trascinamento. Significa dire che l'oggetto sarebbe stato risolto finché non avessi interrotto il trascinamento. –