in fabric.js object can moved in canvas left-clicking, holding , moving mouse. in condition, selected object follows mouse's cursor , object:moving
gets fired. releasing left mouse button exits mode.
is there way change behavior , have object enter mode different events? example, click once have object follow cursor (and have object:moving
fire correctly) , click second time release object in it's final position?
i'm hoping avoid writing scratch listening "mouse move" event, given implemented, triggers enter/exist mode have changed.
i implemented having variable called movedobject
null
if no object moved , contains object if object is moved. if click while object being moved it'll set movedobject
null
. if click while not moving object it'll set movedobject
object if clicked one.
i added listener mouse:move
sets left
, top
of movedobject
mouse x
, y
(minus movedobject
width
, height
/ 2) if movedobject
not null
.
code:
var canvas = new fabric.canvas('canvas'); canvas.setwidth(300); canvas.setheight(300); var circle = new fabric.circle({ radius: 30, fill: '#f55', top: 100, left: 100 }); canvas.add(circle); circle.hascontrols = circle.hasborders = circle.selectable = false; var movedobject = null; canvas.on({ 'mouse:down': function(e) { //if object selected it'll unselected if (movedobject !== null) { movedobject = null; } else { //if no object selected , click occured on object it'll selected if (e.target) { movedobject = e.target; } } }, 'mouse:move': function(e) { //moving object along mouse cursor if (movedobject !== null) { movedobject.left = (e.e.clientx - movedobject.width / 2); movedobject.top = (e.e.clienty - movedobject.height / 2); movedobject.setcoords(); canvas.renderall(); } } });
Comments
Post a Comment