【问题标题】:Snap.svg and dynamic textSnap.svg 和动态文本
【发布时间】:2019-06-09 17:18:16
【问题描述】:

我正在尝试将文本动态放入由 Snap 创建的 svg 中,这是我尝试过的:

this.setContent(
  `<svg id="${this.svgId}"></svg>`
);

var snap = Snap($(`#${this.svgId}`)[0]);
text = "asdfsdfsdsfd";

var rect = snap.paper.rect(0, 0, 50, text.length*3 + 4, 10);
snap.text(1.5,10, text);

console.log("rect", rect);
console.log("snap", snap);

rect.attr({
  fill: "#FFFFFF",
  fillOpacity: 0.6,
});

我明白了:

我希望矩形比文本稍大一点,但必须有比计算文本的长度和高度更好的方法,并且假设字体大小不会改变。

这是我在 snap docs 中找到的关于文本的唯一结果:http://snapsvg.io/docs/#Paper.text

【问题讨论】:

    标签: javascript svg snap.svg


    【解决方案1】:

    您可以尝试在文本元素上使用 getBBox(),并使用它来计算矩形的大小。 getBBox() 将为您提供 x,y,width,height,x2,y2 数字以提供帮助。

    var text = s.text(0,0,'blah blah')
    var bb = text.getBBox();
    var rect = s.rect(bb.x, bb.y, bb.width, bb.height )
    

    根据您想要的任何填充等调整偏移量。您可能还需要考虑笔画宽度,因为我认为这不包括在内。

    【讨论】:

    • 什么是s?捕捉对象?
    • 这是您的论文或 svg,通常来自 s=Snap('#mysvgcontainer') 或 s=Snap(800,800) 或其他任何设置。在您的示例中,我不太确定它的 snap 或 snap.paper 您是否都使用过。
    • 是的,文档很混乱,我怎样才能把那个矩形放在var snap = Snap($(#${this.svgId})[0]);
    • snap.rect(bb.x, bb.y, bb.width, bb.height ) 我会假设(如果 snap 是您的 Snap paper/svg 对象)。
    • 通过这样做i.imgur.com/rcV9HoQ.png我看不到矩形,只有文字...imgur.com/SczBcYO
    猜你喜欢
    • 2016-08-24
    • 1970-01-01
    • 2015-07-31
    • 2014-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-10
    • 2017-10-06
    相关资源
    最近更新 更多