ho il seguente che non funziona correttamente:Fabric.js - Libera disegnare un rettangolo
var canvas = new fabric.Canvas('canvas');
canvas.observe('mouse:down', function(e) { mousedown(e); });
canvas.observe('mouse:move', function(e) { mousemove(e); });
canvas.observe('mouse:up', function(e) { mouseup(e); });
var started = false;
var x = 0;
var y = 0;
/* Mousedown */
function mousedown(e) {
var mouse = canvas.getPointer(e.memo.e);
started = true;
x = mouse.x;
y = mouse.y;
var square = new fabric.Rect({
width: 1,
height: 1,
left: mouse.x,
top: mouse.y,
fill: '#000'
});
canvas.add(square);
canvas.renderAll();
canvas.setActiveObject(square);
}
/* Mousemove */
function mousemove(e) {
if(!started) {
return false;
}
var mouse = canvas.getPointer(e.memo.e);
var x = Math.min(mouse.x, x),
y = Math.min(mouse.y, y),
w = Math.abs(mouse.x - x),
h = Math.abs(mouse.y - y);
if (!w || !h) {
return false;
}
var square = canvas.getActiveObject();
square.set('top', y).set('left', x).set('width', w).set('height', h);
canvas.renderAll();
}
/* Mouseup */
function mouseup(e) {
if(started) {
started = false;
}
}
La logica di cui sopra è da un semplice sistema di disegno rettangolo che ho usato senza fabric.js quindi so che funziona , non solo con fabric.js.
Sembra che la matematica sia disattivata oppure sto impostando i parametri errati con i valori larghezza/altezza/x/y, poiché quando si disegna il rettangolo non segue il cursore correttamente.
Qualsiasi aiuto è molto apprezzato, grazie in anticipo :)
non capisco il motivo per cui il tessuto non ha un evento come "selection: completed" che passa al gestore dei limiti di selezione, gestisce già questa logica internamente. Stavo cercando di ottenere lo stesso e ho finito per aggiungere questo evento al codice sorgente. – krulik