javascript - 如何拖放矩形

标签 javascript d3.js

无法在 d3js 中拖动矩形。该代码对我来说看起来不错。我在这里缺少什么?

所有拖动行为(如开始拖动和拖动结束)都已实现,但拖动仍然不起作用

这是我的代码:

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

 var rect = svgContainer.append("rect")
                        .attr("x", 10)
                        .attr("y", 50)
                        .attr("width", 51)
                        .attr("height", 41)
                        .attr("stroke", "#7E7E7E")
                        .attr("cursor", "move")

var drag = d3.behavior.drag()
                        .on("dragstart", dragstart)
                        .on("drag", drag)
                        .on("dragend", dragend);

                function dragstart()
                {
                    d3.event.sourceEvent.stopPropagation();
                }

                function drag()
                {
                    var self = d3.select(this);
                    //var translate =d3.transform(self.getAttribute("transform")).translate;
                      var translate = d3.transform(self.attr("transform")).translate;
                    var x = d3.event.dx + translate[0],
                            y = d3.event.dy + translate[1];
                    self.attr("transform", "translate(" + x + "," + y + ")");
                }

                function dragend()
                {
                    var mouseCoordinates = d3.mouse(this);
                    if (mouseCoordinates[0] > 170)
                    {
                        //Append new element
                        svg.append("g").append("rect")
                            .attr("x", mouseCoordinates[0])
                            .attr("y", mouseCoordinates[1])
                            .attr("width", 51)
                            .attr("height", 41)
                            .attr("stroke", "#7E7E7E")
                            .style('cursor', 'move')
                            .classed("initialDragRect", true)
                            .call(drag);
                    }
                }
                rect.call(drag);

最佳答案

在函数中更改代码上的 translate 变量声明,并将其拖入此

var translate = d3.transform(self.attr("transform")).translate;

问题是因为self变量没有函数getAttribute()

关于javascript - 如何拖放矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31870784/

相关文章:

javascript - Jquery UI.Datepicker : Display tooltip on mouse hover

javascript - 更改 Img 属性并填充数组错误

javascript - JQUERY 查找 :FIRST not finding the first Paragraph?

javascript - 如何删除D3轴刻度中的逗号并删除最后一个刻度?

javascript - 使用layout.pack将标签放置在圆圈外而不重叠

d3.js - 在 d3.js 中更改所选 map 功能的颜色

javascript - 在 json 数组中搜索特定值

Javascript call() & apply() vs bind()?

javascript - 是否可以仅在 d3 js 中为树布局的子节点绘制虚线链接

javascript - JavaScript 和正则表达式的日期解析问题