创建多个重复形状

Creating multiple repeating shapes

我有以下代码创建包含一些文本的矩形。我需要创建此矩形的多个可寻址实例,以便我可以单独为它们设置动画。每个矩形需要包含不同的文本标签。

var s = Snap(800, 600);
var block = s.rect(50, 50, 100, 100, 5, 5);

block.attr({
    fill: "rgb(236, 240, 241)",
    stroke: "#1f2c39",
    strokeWidth: 3
});

var text = s.text(70, 105, "Hello World");
text.attr({
    'font-size':20
});

block.attr({
    width: (text.node.clientWidth + 50)
});

我不想重复我的代码,而是想创建一个函数来接受放置矩形的文本和坐标。实现这一目标的最佳方法是什么?此功能是否已包含在 snap.svg 中?

更新

我创建了另一个插件,这次是为了导入和缩放 SVG 图像。这是为此采取的最佳方法吗?使用`transform 属性缩放图像的唯一方法是什么?

导入 SVG 插件示例。

Snap.plugin( function( Snap, Element, Paper, global ) {
    Paper.prototype.importImage = function( x, y, scale ) {
        var ig1 = s.group();
        var image = Snap.load("../package.svg", function ( loadedFragment ) {
            ig1.attr({transform: 'translate(' + x + ',' + y + ') scale('+ scale +')'});
            ig1.append( loadedFragment);
        } );
        return ig1;
    }
});

您可以创建一个插件来为您提供新的元素选项,例如...

Snap.plugin( function( Snap, Element, Paper, global ) {

  Paper.prototype.textRect = function( text, x, y ) {
        var block = s.rect(x, y, 100, 100, 5, 5)
                     .attr({
                        fill: "rgb(236, 240, 241)",
                        stroke: "#1f2c39",
                        strokeWidth: 3,
                      });

        var text = s.text(x + 20, y + 50, text).attr({ 'font-size': 20 });

        block.attr({ width: (text.node.clientWidth + 50)  });
  }         

});

var s = Snap(800,800)

s.textRect('Hi', 100, 100 ); 
s.textRect('There', 100, 200 );

example fiddle

如果您要四处移动或拖动它们或进行其他操作,您可能希望将它们都放在 'g' 组元素中,以便您可以对组执行操作。