Javascript 选择添加到kinetic.js中画布的任何动态形状

Javascript 选择添加到kinetic.js中画布的任何动态形状,javascript,canvas,kineticjs,Javascript,Canvas,Kineticjs,让我解释一下我做了什么。首先,我制作了一个舞台,然后在舞台上添加了与舞台大小相同的矩形。之后,我定义了一个函数,可以在鼠标按下事件中动态绘制矩形。在这之前,一切都正常,之后我需要的是,当我双击任何形状时,我无法更改该形状的颜色 让我们看看下面的代码- <!DOCTYPE html> <html> <head> <title>Drawing the custom shapes</title> &l

让我解释一下我做了什么。首先,我制作了一个舞台,然后在舞台上添加了与舞台大小相同的矩形。之后,我定义了一个函数,可以在鼠标按下事件中动态绘制矩形。在这之前,一切都正常,之后我需要的是,当我双击任何形状时,我无法更改该形状的颜色

让我们看看下面的代码-

<!DOCTYPE html>
<html>
    <head>
        <title>Drawing the custom shapes</title>

        <script src="kinetic-v4.6.0.min.js"></script>

        <script defer="defer">
            function Execute()
            {
                //Defining the stage
                var stage= new Kinetic.Stage({
                    container:'container',
                    width:400,
                    height:400
                });

                //Adding a rectangle layer

                var backLayer= new Kinetic.Rect({
                    x:0,
                    y:0,
                    width:stage.getWidth(),
                    height:stage.getHeight(),
                    fill:'black'

                });
                // Creating a layer
                var layer= new Kinetic.Layer();
                //Adding the background to it!
                layer.add(backLayer);
                stage.add(layer);

                //============ADDING THE FUNCTIONALITY FOR THE RECTANGLE=================
                //Defining the variables
                var isMouseDown=false;
                var refRect,refRect1;
                var Enable=false;
                var originX= new Array();
                var originY=new Array()

                backLayer.on('mousedown',function(){
                    onMouseDown();
                });

                backLayer.on('mousemove',function(){
                    onMouseMove();
                });

                backLayer.on('mouseup',function(){
                    onMouseUp();
                });

                //Defining the global variables
                var initialX=10, initialY=10;

                //Defining the functions
                function onMouseDown()
                {
                    //Code goes here

                    //Setting the mouse
                    isMouseDown=true;

                    //Getting the coordinates
                    var pointerPosition= stage.getPointerPosition();

                    //Reflush the array
                    originX=[];
                    originY=[];
                    originX.push(pointerPosition.x);
                    originY.push(pointerPosition.y);

                    //Creating the rectangle Shape
                     var rect= new Kinetic.Rect({
                        x:originX[0],
                        y:originY[0],
                        width:0,
                        height:0,
                        stroke:'white',
                        strokeWidth:4,
                        name:'Rectangle'

                    });
                    //Creating a copy of it!
                    refRect=rect;
                    refRect1=rect;  //<<<<<<Recently created rectangle as active
                    rect.setListening(true);

                    // Adding to the layer
                    layer.add(rect);
                    Enable=false;
                    //stage.add(layer);

                }

                //<<<<<<<<<<<<<<CODE TO CHANGE THE COLOR OF THE SELECTED SHAPE
                stage.on('dblclick',function(evt){
                    var selected1=evt.targetNode;
                   // var selected=evt.targetNode;
                    alert(selected1.setFill('red'));

                });


                function onMouseMove()
                {
                    //Code goes here

                    if(!isMouseDown)   // ie, is mouse pointer not down iff true than return
                    {
                        return;
                    };
                    var pointerPosition= stage.getPointerPosition();
                    refRect.setWidth(pointerPosition.x-refRect.getX());
                    refRect.setHeight(pointerPosition.y-refRect.getY());
                    layer.drawScene();

                }

                function onMouseUp()
                {
                    isMouseDown=false;
                    stage.add(layer);
                }


            }
        </script>
    </head>

    <body onload="Execute()">
        <div id="container" style="width: 400px; height: 400px; border: 1px solid red"></div><br/>
        <input type="button" id="fill" value="FILL">
    </body>

</html>

绘制自定义形状
函数Execute()
{
//定义阶段
var阶段=新的动力学阶段({
容器:'容器',
宽度:400,
身高:400
});
//添加矩形层
var backLayer=新的动能.Rect({
x:0,,
y:0,
宽度:stage.getWidth(),
高度:stage.getHeight(),
填充:“黑色”
});
//创建图层
var layer=新的动能层();
//添加背景到它!
layer.add(backLayer);
阶段。添加(层);
//=============添加矩形的功能=================
//定义变量
var isMouseDown=错误;
var reflect,reflect1;
var Enable=false;
var originX=新数组();
var originY=新数组()
backLayer.on('mousedown',function()){
onMouseDown();
});
backLayer.on('mousemove',function()){
onMouseMove();
});
backLayer.on('mouseup',function(){
onMouseUp();
});
//定义全局变量
var initialX=10,initialY=10;
//定义功能
函数onMouseDown()
{
//代码在这里
//设置鼠标
isMouseDown=真;
//获取坐标
var pointerPosition=stage.getPointerPosition();
//重新填充阵列
originX=[];
原始=[];
原始推力(指针位置x);
原始推送(指针位置y);
//创建矩形形状
var rect=新的动能.rect({
x:originX[0],
y:原创[0],
宽度:0,
高度:0,,
笔画:'白色',
冲程宽度:4,
名称:“矩形”
});
//创建它的副本!
reflect=rect;

reflect1=rect;//在对舞台/层执行更改后,您需要使用
draw()
drawsecene()
功能,以便将其渲染到场景中

//<<<<<<<<<<<<<<CODE TO CHANGE THE COLOR OF THE SELECTED SHAPE
stage.on('dblclick',function(evt){
    var selected1=evt.targetNode;
    selected1.setFill('red');
    stage.draw(); //or layer.draw();
});

//谢谢….projeqht.我真的很担心这个问题…yopu解决了它谢谢。别担心,别忘了console.log是你的朋友!如果有疑问,请使用console.log(evt.targetNode);查看它的选择是否正确,并检查对象的属性:)