KineticJS - Drawing lines with the mouse

I use KinectJS to draw lines based on mouse movement. When the user holds the mouse button down, I want it to be the "starting" point of the line, and when the user releases it, it will be the "end" of the line, but when they hold the mouse, I want to dynamically redraw the line as the mouse moves. Is it possible?

+5
source share
1 answer

Yes it is possible.

Basically, you should redraw your layer during the onMouseMove event. You will need a flag to control when the line is moving or not.

When initializing the script, this flag must be false.

In onMouseDown, the beginning of the line should take the current mouse coordinates and set the flag to true.

onMouseMouve, true, , .

onMouseUp false.

. :

<!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>
+13

All Articles