How to either determine SVG text box width, or force line breaks after 'x' characters?

后端 未结 5 1396
猫巷女王i
猫巷女王i 2020-12-04 15:00

I\'m creating an SVG text box using the Raphael library, and filling it with a dynamic string which is extracted from an XML document.

Sometimes, this string is long

5条回答
  •  鱼传尺愫
    2020-12-04 15:05

    There isn't an attribute for text wrapping, but there is a simple trick you can use. Add one word at a time to a text object and when it gets too wide, add a line feed. You can use the getBBox() function to determine the width. Basically, you emulate an old fashioned typewriter. Here is a sample of some code that will do this for you. You could easily turn this into a simple function that takes the text and a width.

    var r = Raphael(500, 500);
    var t = r.text(100, 100).attr('text-anchor', 'start');
    var maxWidth = 100;
    
    var content = "Mauris mauris ante, blandit et, ultrices a, suscipit eget, quam. Integer ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate. ";
    var words = content.split(" ");
    
    var tempText = "";
    for (var i=0; i maxWidth) {
        tempText += "\n" + words[i];
      } else {
        tempText += " " + words[i];
      }
    }
    
    t.attr("text", tempText.substring(1));
    

提交回复
热议问题