Estoy usando KinectJS para dibujar líneas basadas en el movimiento del mouse. Cuando un usuario mantiene presionado el botón del mouse, quiero que sea el punto de inicio de la línea, y cuando el usuario lo suelta, será el 'final' de la línea, pero como están presionando el botón del mouse quiero para poder volver a dibujar dinámicamente la línea a medida que se mueve mi mouse. es posible?KineticJS - Dibujo de líneas con Mouse
5
A
Respuesta
13
Sí, es posible.
Básicamente, tiene que volver a dibujar la capa durante el evento onMouseMove. Necesitará una bandera para controlar cuándo la línea se está moviendo o no.
Cuando la secuencia de comandos se inicializa, esta bandera debe ser falsa.
En onMouseDown, el inicio de línea debe recibir las coordenadas actuales del mouse y establecer el indicador en verdadero.
En onMouseMouve, si la bandera es verdadera, debe actualizar el extremo de la línea para recibir las coordenadas actuales del mouse.
En onMouseUp, la bandera debe establecerse en falso.
Véase el siguiente ejemplo:
<!DOCTYPE HTML>
<html>
<head>
<style>
body {
margin: 0px;
padding: 0px;
}
canvas {
border: 1px solid #9C9898;
}
</style>
<script src="http://www.html5canvastutorials.com/libraries/kinetic-v4.0.1.js"></script>
<script>
window.onload = function() {
layer = new Kinetic.Layer();
stage = new Kinetic.Stage({
container: "container",
width: 320,
height: 320
});
background = new Kinetic.Rect({
x: 0,
y: 0,
width: stage.getWidth(),
height: stage.getHeight(),
fill: "white"
});
line = new Kinetic.Line({
points: [0, 0, 50, 50],
stroke: "red"
});
layer.add(background);
layer.add(line);
stage.add(layer);
moving = false;
stage.on("mousedown", function(){
if (moving){
moving = false;layer.draw();
} else {
var mousePos = stage.getMousePosition();
//start point and end point are the same
line.getPoints()[0].x = mousePos.x;
line.getPoints()[0].y = mousePos.y;
line.getPoints()[1].x = mousePos.x;
line.getPoints()[1].y = mousePos.y;
moving = true;
layer.drawScene();
}
});
stage.on("mousemove", function(){
if (moving) {
var mousePos = stage.getMousePosition();
var x = mousePos.x;
var y = mousePos.y;
line.getPoints()[1].x = mousePos.x;
line.getPoints()[1].y = mousePos.y;
moving = true;
layer.drawScene();
}
});
stage.on("mouseup", function(){
moving = false;
});
};
</script>
</head>
<body>
<div id="container" ></div>
</body>
</html>
Cuestiones relacionadas
- 1. Dibujo interactivo con kineticjs
- 2. Dibujo de líneas animadas con jQuery
- 3. ¿Cómo dibujo líneas usando XNA?
- 4. iPhone CGContext: dibujo dos líneas con dos colores diferentes
- 5. Escalado a un punto fijo en KineticJS
- 6. Evento GTK # mouse en el área de dibujo
- 7. Kineticjs vs Raphaeljs
- 8. Cómo guardar y cargar líneas de dibujo iphone SDK
- 9. Comprensión de limpieza de capa de Canvas & KineticJS
- 10. Zoom y panorámica en KineticJS
- 11. Dibujo con .NET
- 12. cuadrícula de dibujo con jQuery SVG produce líneas 2px en lugar de 1px
- 13. glPolygonOffset() errores con líneas
- 14. Rectángulo de dibujo con XNA
- 15. ¿Cartogramas de dibujo con Matplotlib?
- 16. Problemas de dibujo con CALayer
- 17. Dibujo con varios colores en lienzo
- 18. dibujo gráfico de líneas con el eje y primario y secundario C#
- 19. Eliminar objetos de una capa usando KineticJS
- 20. Animación de dibujo
- 21. Biblioteca de dibujo multiplataforma
- 22. Dibujo en C# mapa de bits con C++
- 23. Python con matplotlib - reutilizando funciones de dibujo
- 24. Control de dibujo con fondo transparente
- 25. Gráfico de dibujo con bordes ponderados
- 26. Desplazamiento DataGridView con mouse
- 27. Pyglet OpenGL dibujo suavizado
- 28. Dibujar con el mouse provoca huecos entre los píxeles
- 29. Recuperación de una forma en el mouseover usando KineticJS
- 30. Cualquier experiencia con un buen componente/biblioteca de dibujo
hay una manera de dibujar varias líneas y no la sustitución de la misma línea? – Mike
@TrustWeb seguro que lo es. Simplemente cree una nueva forma en cada mousedown –
Aquí hay un JSFiddle de la respuesta para su conveniencia: http://jsfiddle.net/nSSTS/ –