snap raphaël morris examples javascript svg line raphael

javascript - raphaël - snap svg



Dibuja una línea de conexión en RaphaelJS (2)

¿Cómo voy a dibujar una línea de conexión en Raphael donde el mousedown inicia el punto de inicio de la línea, el mousemove mueve el punto final sin mover el punto de inicio y el mouseup lo deja como está?


Puede agregar su propio método de line a la clase Paper ...

Raphael.fn.line = function(startX, startY, endX, endY){ return this.path(''M'' + startX + '' '' + startY + '' L'' + endX + '' '' + endY); };

... que puede usar más tarde, como cualquier otro método conocido de la clase Papel (círculo, etc.):

var paper = Raphael(''myPaper'', 0, 0, 300, 400); paper.line(50, 50, 250, 350); paper.line(250, 50, 50, 150).attr({stroke:''red''});

(ver http://jsfiddle.net/f4hSM/ )


Eche un vistazo a la fuente de http://www.warfuric.com/taitems/RaphaelJS/arrow_test.htm .

Esto podría ayudarte a comenzar.

EDITAR

Hice un ejemplo rápido que le dará una ventaja (aunque todavía necesita algo de trabajo: validación de parámetros, adición de comentarios, etcétera).

Nota: todavía tienes que adaptar el camino a raphael.js

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en"> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta http-equiv="edit-Type" edit="text/html; charset=utf-8"> <!-- Update the path to raphael js --> <script type="text/javascript"src="path/to/raphael1.4.js"></script> <script type=''text/javascript'' src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> <style type=''text/css''> svg { border: solid 1px #000; } </style> </head> <body> <div id="raphaelContainer"></div> <script type=''text/javascript''> //<![CDATA[ function Line(startX, startY, endX, endY, raphael) { var start = { x: startX, y: startY }; var end = { x: endX, y: endY }; var getPath = function() { return "M" + start.x + " " + start.y + " L" + end.x + " " + end.y; }; var redraw = function() { node.attr("path", getPath()); } var node = raphael.path(getPath()); return { updateStart: function(x, y) { start.x = x; start.y = y; redraw(); return this; }, updateEnd: function(x, y) { end.x = x; end.y = y; redraw(); return this; } }; }; $(document).ready(function() { var paper = Raphael("raphaelContainer",0, 0, 300, 400); $("#raphaelContainer").mousedown( function(e) { x = e.offsetX; y = e.offsetY; line = Line(x, y, x, y, paper); $("#raphaelContainer").bind(''mousemove'', function(e) { x = e.offsetX; y = e.offsetY; line.updateEnd(x, y); }); }); $("#raphaelContainer").mouseup( function(e) { $("#raphaelContainer").unbind(''mousemove''); }); }); //]]> </script> </body> </html>

Ver ejemplo: http://jsfiddle.net/rRtAq/9358/