2010-03-24 16 views
8

Estoy buscando un código Javascript para permitir que el usuario dibuje una línea (en una imagen).Javascript dibujar la línea dinámica

Al igual que la herramienta de línea en Photoshop (por ejemplo):

El usuario hace clic en la imagen, arrastra el ratón (mientras que la línea entre el punto inicial y el punto de ratón se dibuja dinámicamente en arrastre del ratón).

También necesitaría una función invocable para enviar a la página las coordenadas de inicio y fin.

he encontrado este muy buen guión para la selección del área: http://www.defusion.org.uk/code/javascript-image-cropper-ui-using-prototype-scriptaculous/

y he encontrado muchos guión para el trazado de líneas (y otras formas de JS), pero no pude encontrar lo que estoy buscando .

Gracias

Respuesta

17

Dado que no existe un método estándar de dibujo, si desea admitir navegadores más antiguos e IE, , necesitará utilizar una biblioteca. La biblioteca se encargará de las cuestiones de plataforma cruzada de dibujo con SVG o de Microsoft VML

recomiendo Raphael JS

+0

+1 Otra que debe tenerse en cuenta es la biblioteca de Google Closure: http://code.google.com/closure/library/ (consulte el paquete 'goog.graphics'). –

+0

Bueno, supongo que sería Raphael JS. Eché un vistazo a su API y se ve genial. Tendría que implementar la línea arrastrando por mí mismo, pero podría manejar eso ... Gracias – Ranch

+0

@Ranch ¿puedes publicar un ejemplo? – karse23

1

Considere el uso del elemento canvas para mostrar la imagen. Entonces, dibujar una línea (o cualquier otra cosa) en él es trivial.

+0

Tenga en cuenta que 'canvas' es relativamente modernas de modo que sólo los navegadores recientes tienen, y el IE no lo tiene, incluso ahora: http://en.wikipedia.org/wiki/Canvas_element # Support –

1

Si tus cuentas es lo suficientemente bueno, es posible (aunque locas) a hacerlo sin la etiqueta de la lona para el más moderno navegadores usando uno de (según corresponda):

Al crear por ejemplo. un div 1px alto, con p. ej. un borde superior para su 'línea', y usando el evento de arrastre del mouse para posicionarlo y rotarlo.

Locura se encuentra de esta manera pero sería un ejercicio bastante divertido. (Debe usar algo como Raphael JS, que es cross browser y cuerdo - ver arriba)

3

raphael.js es una herramienta de renderizado liviana para javascript (licencia MIT) que funciona en FF, Safari, Chrome e IE6 +.

Utiliza SVG para los primeros 3 y VML para IE, pero la API es idéntica en todos los navegadores y muy dulce.

http://raphaeljs.com/

por ejemplo

// Creates canvas 320 × 200 at 10, 50 
var paper = Raphael(10, 50, 320, 200); 

// Creates circle at x = 50, y = 40, with radius 10 
var circle = paper.circle(50, 40, 10); 
// Sets the fill attribute of the circle to red (#f00) 
circle.attr("fill", "#f00"); 

// Sets the stroke attribute of the circle to white 
circle.attr("stroke", "#fff"); 

Lo he utilizado para dibujar una línea mientras arrastra y puedo responder por su facilidad de uso

1

estoy trabajando en algo similar. Dibujar una línea en un lienzo es bastante simple. Puedes tomar de mi código aquí.

http://p-func.com/html5_test/test2.html

sólo tienes que seguir el oyente mousedown.

Aunque he encontrado, al querer cargar imágenes, que la biblioteca de Rafael podría ser mejor usarla. Vi esto porque Canvas parece actuar como una imagen plana. Entonces, si quiero agregarle un objetivo, permitir que el usuario manipule esa imagen, no me dejará (a menos que haya algo que me falta).

Raphael le permite dibujar y seguir usando esos dibujos e imágenes como objetos.

1

Una solución multi-navegador para dibujar líneas en Javascript, sin requerir ninguna biblioteca externa, se puede encontrar aquí: http://bytes.com/topic/javascript/answers/88771-drawing-vector-lines-javascript

Esto funciona en todos los navegadores, incluyendo IE.

+0

Estaba buscando un código JS puro y esto funciona muy bien en IE9 y Firefox8 (Probado en ambos, es posible que otros navegadores también sean compatibles). Cuando copie su código, tendrá que formatear algunas cuerdas y también cambiar el color de la línea de #FFFFFF a # FF0000 (¡porque el fondo es blanco!). –

Cuestiones relacionadas