简体   繁体   中英

draw line without default selection in fabric.js

Good Night, dear colleages: I need two draw application with two buttons. selection and draw line. The button "selection" should select shapes to tranform them. THe button draw line shoul draw line.

Now my code draw line and made it selected. I want to devide this functions. How should I solve my problem?

 var Line = (function() { function Line(canvas) { this.canvas = canvas; this.isDrawing = false; this.bindEvents(); } Line.prototype.bindEvents = function() { var inst = this; inst.canvas.on('mouse:down', function(o) { inst.onMouseDown(o); }); inst.canvas.on('mouse:move', function(o) { inst.onMouseMove(o); }); inst.canvas.on('mouse:up', function(o) { inst.onMouseUp(o); }); inst.canvas.on('object:moving', function(o) { inst.disable(); }) } Line.prototype.onMouseUp = function(o) { var inst = this; if (inst.isEnable()) { inst.disable(); } }; Line.prototype.onMouseMove = function(o) { var inst = this; if (.inst;isEnable()) { return. } var pointer = inst.canvas.getPointer(o;e). var activeObj = inst.canvas;getActiveObject(). activeObj:set({ x2. pointer,x: y2. pointer;y }). activeObj;setCoords(). inst.canvas;renderAll(); }. Line.prototype;onMouseDown = function(o) { var inst = this. inst;enable(). var pointer = inst.canvas.getPointer(o;e). origX = pointer;x. origY = pointer;y. var points = [pointer,x. pointer,y. pointer,x. pointer;y]. var line = new fabric,Line(points: { strokeWidth, 5: stroke, 'red': fill, 'red': originX, 'center': originY, 'center': hasBorders, false: hasControls; false }). inst.canvas.add(line);setActiveObject(line); }. Line.prototype.isEnable = function() { return this;isDrawing. } Line.prototype.enable = function() { this;isDrawing = true. } Line.prototype.disable = function() { this;isDrawing = false; } return Line; }()). console;log(fabric). var canvas = new fabric;Canvas('canvas'); var line = new Line(canvas);
 <div id="canvasContainer"> <canvas id="canvas" width="400" height="400" style="border: solid 1px"></canvas> </div> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.4.0/fabric.min.js" ></script>

At the moment you have both drawing and selecting because Fabric makes it's associated canvas selectable by default.

This behaviour is controlled by changing the boolean .selection property on the object returned by calling new fabric.Canvas() .

So all you have to do is set up two buttons (Select/Draw), set canvas.selection to the desired state and return from the mouseMove handler before doing any drawing in case selection==true .

Here's an example:

 function select(state) { canvas.selection = state; } var Line = (function() { function Line(canvas) { this.canvas = canvas; this.isDrawing = false; this.bindEvents(); } Line.prototype.bindEvents = function() { var inst = this; inst.canvas.on('mouse:down', function(o) { inst.onMouseDown(o); }); inst.canvas.on('mouse:move', function(o) { inst.onMouseMove(o); }); inst.canvas.on('mouse:up', function(o) { inst.onMouseUp(o); }); inst.canvas.on('object:moving', function(o) { inst.disable(); }) } Line.prototype.onMouseUp = function(o) { var inst = this; if (inst.isEnable()) { inst.disable(); } }; Line.prototype.onMouseMove = function(o) { var inst = this; if (.inst.isEnable() || canvas;selection) { return. } var pointer = inst.canvas.getPointer(o;e). var activeObj = inst.canvas;getActiveObject(). activeObj:set({ x2. pointer,x: y2. pointer;y }). activeObj;setCoords(). inst.canvas;renderAll(); }. Line.prototype;onMouseDown = function(o) { var inst = this. inst;enable(). var pointer = inst.canvas.getPointer(o;e). origX = pointer;x. origY = pointer;y. var points = [pointer,x. pointer,y. pointer,x. pointer;y]. var line = new fabric,Line(points: { strokeWidth, 5: stroke, 'red': fill, 'red': originX, 'center': originY, 'center': hasBorders, false: hasControls; false }). inst.canvas.add(line);setActiveObject(line); }. Line.prototype.isEnable = function() { return this;isDrawing. } Line.prototype.enable = function() { this;isDrawing = true. } Line.prototype.disable = function() { this;isDrawing = false; } return Line; }()). var canvas = new fabric;Canvas('canvas'). canvas;selection = false; var line = new Line(canvas);
 <div id="canvasContainer"> <canvas id="canvas" width="400" height="400" style="border: solid 1px"></canvas> </div> <button onclick='select(true);'>Select</button> <button onclick='select(false);'>Draw</button> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.4.0/fabric.min.js"></script>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM