Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何通过拖放创建形状_Javascript_Jquery_D3.js_Svg - Fatal编程技术网

Javascript 如何通过拖放创建形状

Javascript 如何通过拖放创建形状,javascript,jquery,d3.js,svg,Javascript,Jquery,D3.js,Svg,我可以在mousedown上创建一个形状,但如何在拖放上创建呢。基本上,应该在鼠标坐标上创建一个形状,看起来像拖放 以下是我尝试过的: var svg = d3.select("body") .append("svg") .attr("width", 800) .attr("height", 803); var clientX

我可以在mousedown上创建一个形状,但如何在拖放上创建呢。基本上,应该在鼠标坐标上创建一个形状,看起来像拖放

以下是我尝试过的:

var svg = d3.select("body")
                        .append("svg")
                        .attr("width", 800)
                        .attr("height", 803);

            var clientX;
            var clientY;
            var offsetX;
            var offsetY;
            var x, y;
            var shapeId;

            $('body').on('mousemove', function (event)
            {
                var $stageContainer = $("#content");
                var stageOffset = $stageContainer.offset();
                clientX = event.clientX;
                clientY = event.clientY;
                console.log("ClientXY: " + clientX + " " + clientY);
                offsetX = stageOffset.left;
                offsetY = stageOffset.top;
                console.log("Offsets: " + offsetX + " " + offsetY);
                x = clientX - offsetX;
                y = clientY - offsetY;
                console.log("mouse moved: " + x + " " + y);
            });

            function getId(Id) {
                $('#content div:first a').on("mousedown", function (event) {
                    shapeId = this.id;
                    console.log(shapeId);
                })
            }
            getId();

            $('body').on('mouseup', function ()
            {
                if (shapeId === "newTask")
                {
                    console.log("shape is", shapeId);
                    createRect(x, y);
                }
            })

                function createRect(x,y) {
                    svg.append("rect")
                            .attr("id", "onRectDragStart")
                            .attr("rx", 10)
                            .attr("width", 51)
                            .attr("height", 41) 
                            .attr("x", x)
                            .attr("y", y)
                            .attr("stroke-width", 2)
                            .attr("stroke", "#7E7E7E")
                            .style('cursor', 'move')
                            .style("fill", "white")
                            .classed("dragTarget", true)
                }

我不知道该如何创建拖放功能

你应该仔细阅读d3的阻力特性。这比把jQueery和d3混在一起要好得多。这里有很多例子可以让你继续。@coolblue,但我实际上并没有在这里拖动任何形状,我试图在拖动端创建一个形状。PNG图像在拖动时显示透明图像,在拖动结束时,我想根据鼠标位置创建一个形状。是的,我明白了,d3拖动行为可以附加到主体或一些背景画布或任何东西上,你可以使用它的拖动事件。你应该阅读d3拖动行为。这比把jQueery和d3混在一起要好得多。这里有很多例子可以让你继续。@coolblue,但我实际上并没有在这里拖动任何形状,我试图在拖动端创建一个形状。PNG图像在拖动时显示透明图像,在拖动结束时,我想根据鼠标位置创建一个形状。是的,我明白了,d3拖动行为可以附加到主体或一些背景画布或任何东西上,您可以使用它的dragend事件。