基本Rect,jointjs中的文本有2种不同的字体大小

时间:2015-04-10 08:27:56

标签: jointjs

我有一个像这样的基本Rect形状:

  var rectShape = new joint.shapes.basic.Rect({
  position: { x: 60, y: 10 },
  size: { width: 160, height: 35 },
  attrs: {
    rect: {
        fill: '#F5F5F5'
    },
    text: {
        fill: '#FC8A26',
        'font-size': 12,
        'font-weight': 'bold',
        'font-variant': 'small-caps'
    }
  }
 }); 

我使用clone()创建更多类似的矩形:

var rect1 = rectShape.clone().translate(520, 10).attr('text/text','rect1');

我希望在rect中有两个不同的单词,一个大小为12,另一个大小为8.我对如何做到这一点有什么想法?

谢谢!

1 个答案:

答案 0 :(得分:0)

您需要使用新的SVG标记创建自定义形状,其中包含一个文本元素,其中包含您想要的每个单词的<tspan>。您可以从标准Rect元素调整标记。为每个元素指定一个不同的类名,例如将Rect标记中的<text/>元素替换为<text><tspan class="word1"/><tspan class="word2"/></text>。形状定义如下所示:

joint.shapes.my.twoTextRect = joint.shapes.basic.Generic.extend({

    markup: '<g class="rotatable"><g class="scalable"><rect/></g><text><tspan class="word1"></tspan> <tspan class="word2"></tspan></text></g>',

    defaults: joint.util.deepSupplement({

        type: 'my.twoTextRect',
        attrs: {
            rect: { fill: 'white', stroke: 'black', 'stroke-width': 1, 'follow-scale': true, width: 160, height: 35 },
            text: { ref: 'rect' },
            '.word1': { 'font-size': 12 },
            '.word2': { 'font-size': 8 }

        },
        size: { width: 160, height: 35 }
    }, joint.shapes.basic.Generic.prototype.defaults)
});

然后创建形状实例:

  var rectShape = new joint.shapes.my.twoTextRect();

设置可以使用的<tspan> SVG元素的文本

rectShape.attr('.word1/text', 'word 1');
rectShape.attr('.word2/text', 'word 2');

这会产生一个如下所示的元素:

rectangle with two words of different sizes

您可以像这样克隆元素:

var clone = rectShape.clone().translate(520, 10).attr({'.word1': {text: 'clone1'}, '.word2': {text: 'clone2' }});

这会产生一个新元素:

cloned rectangle