选择多个svg元素并在Raphael.js中拖动它们

选择多个svg元素并在Raphael.js中拖动它们,svg,selection,raphael,drag,Svg,Selection,Raphael,Drag,有人知道我怎样才能做到这一点吗 我基本上有一个svg文档,包含多个形状、线条、文本等。。。我正在尝试实现一个选择工具,它可以帮助我选择多个元素,对它们进行分组并拖动它们。raphäel中有一个称为set的功能: 可以将要拖动的所有图元添加到新集合中,然后将拖动机制应用于该集合 我给你做了这个: 这并不完美。我会将mousemove事件添加到文档中,但为此您需要一个类似jQuery的库。否则,如果您将鼠标移动到fast,则会出现掉落 我这样做了(): 编辑:更干净的东西 创建用于设置和检索元素组的

有人知道我怎样才能做到这一点吗


我基本上有一个svg文档,包含多个形状、线条、文本等。。。我正在尝试实现一个选择工具,它可以帮助我选择多个元素,对它们进行分组并拖动它们。

raphäel中有一个称为set的功能:

可以将要拖动的所有图元添加到新集合中,然后将拖动机制应用于该集合

我给你做了这个:

这并不完美。我会将mousemove事件添加到文档中,但为此您需要一个类似jQuery的库。否则,如果您将鼠标移动到fast,则会出现掉落

我这样做了():

编辑:更干净的东西

  • 创建用于设置和检索元素组的方法:

    Raphael.el.setGroup = function (group) {
      this.group = group;
    };
    Raphael.el.getGroup = function () {
      return this.group;
    };
    
  • 创建分组元素的方法:

    Raphael.fn.superRect = function (x, y, w, h, text) {
      var background = this.rect(x, y, w, h).attr({
        fill: "#FFF",
        stroke: "#000",
        "stroke-width": 1
      });
      var label = this.text(x+w/2,y+h/2, text);
      var layer = this.rect(x, y, w, h).attr({
        fill: "#FFF",
        "fill-opacity": 0,
        "stroke-opacity": 0,
        cursor: "move"
      });
      var group = this.set();
      group.push(background, label, layer);
      layer.setGroup(group);
      return layer;
    };
    
    var dragger = function () {
      this.group = this.getGroup();
      this.previousDx = 0;
      this.previousDy = 0;
    },
    move = function (dx, dy) {
      var txGroup = dx-this.previousDx;
      var tyGroup = dy-this.previousDy;
    
      this.group.translate(txGroup,tyGroup);
    
      this.previousDx = dx;
      this.previousDy = dy;
    },
    up = function () {};
    
  • 创建用于拖动分组元素的函数:

    Raphael.fn.superRect = function (x, y, w, h, text) {
      var background = this.rect(x, y, w, h).attr({
        fill: "#FFF",
        stroke: "#000",
        "stroke-width": 1
      });
      var label = this.text(x+w/2,y+h/2, text);
      var layer = this.rect(x, y, w, h).attr({
        fill: "#FFF",
        "fill-opacity": 0,
        "stroke-opacity": 0,
        cursor: "move"
      });
      var group = this.set();
      group.push(background, label, layer);
      layer.setGroup(group);
      return layer;
    };
    
    var dragger = function () {
      this.group = this.getGroup();
      this.previousDx = 0;
      this.previousDy = 0;
    },
    move = function (dx, dy) {
      var txGroup = dx-this.previousDx;
      var tyGroup = dy-this.previousDy;
    
      this.group.translate(txGroup,tyGroup);
    
      this.previousDx = dx;
      this.previousDy = dy;
    },
    up = function () {};
    
  • 初始化SVG文件并创建元素(元素的顺序很重要)::


  • 我感觉到了,蒙基。为了这个答案付出了如此多的努力,结果却被提问者忽视了。