KineticJS - 使用鼠标绘制线条

5

我正在使用KinectJS根据鼠标移动绘制线条。当用户按住鼠标按钮时,我希望它成为线条的“起点”,当用户释放时,它将是线条的“终点”,但是当他们按住鼠标时,我希望能够动态重新绘制线条,以跟随我的鼠标移动。这是否可行?

1个回答

13
是的,这是可行的。
基本上,在onMouseMove事件期间,您需要重新绘制图层。您需要一个标志来控制线是否正在移动。
当脚本初始化时,此标志应为false。
在onMouseDown时,线开始应接收当前鼠标坐标并将标志设置为true。
在onMouseMove时,如果标志为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>

有没有一种方法可以绘制多条线而不替换同一条线? - Michele
@TrustWeb 当然可以。只需在每次鼠标按下时创建一个新形状。 - Paolo Casciello

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接