2016-04-10 13 views
0

Gibt es eine Möglichkeit, Text auf einem HTML-Svg-Textpfad nicht zu drehen, so dass die Ziffern horizontal ausgerichtet bleiben?horizontaler Text auf Pfad

<svg> 
    <path id="line" d="..." fill="none" /> 
    <text> 
     <textPath id="ptext" xlink:href="#lineAB" startOffset="0"> 
     </textPath> 
    </text> 
</svg> 

Click here for an image to show what I mean.

+0

Nicht aautomatically, aber man konnte den Winkel, in jedem Glyphe Ort arbeiten und eine drehen, um die Glyphe anwenden. –

+0

In anderen Worten, verwenden Sie '' für jeden Buchstaben, dann verwenden Sie 'dy = xxx' Werte, um die Buchstaben oder nach unten zu bewegen. –

+0

Das war nicht das, was ich dachte, aber das würde auch funktionieren. –

Antwort

0

Mit diesem mozilla source als Vorlage, mein Beispiel hier ist. Nicht 100% stimmen mit der Kurve überein, da jede Zeichenbreite nicht festgelegt ist, während meine Codierung anderes annimmt. Hatte diesen Code in meinem Kopf seit 3 ​​Jahren (ya, kein Scherz!).

(Überlassen Sie es den Lesern zu versuchen, eine bessere Übereinstimmung, Hinweis: Verwenden Sie BBox() auf jedem char, dann passen Sie die dy=xxx und steps Wert).

var t = document.getElementById('origText'); 
 
var t_text = t.textContent; // "We go up...." 
 
var curve = document.getElementById("MyPath"); 
 
var len = curve.getTotalLength(); // curve length 
 

 
var steps = len/t_text.length; // get width of step 
 
var start_pt = 0; // start at beginning 
 
var prev_pt = curve.getPointAtLength(0); // measure first step 
 

 

 
t.textContent = ""; // clear up original text; 
 

 
for (var i = 0; i < t_text.length; ++i) { // char loop 
 
    var new_pt = curve.getPointAtLength(start_pt); // measure pt 
 
    var ts = genTspan(t_text[i], prev_pt, new_pt); // tspan 
 
    t.appendChild(ts); // add to <text> 
 

 
    start_pt += steps; // go to next step (point) 
 
    prev_pt = new_pt; // remember previous point 
 
} 
 

 
function genTspan(myChar,prev_pt,new_pt) { 
 
    var tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); 
 
    tspan.setAttributeNS(null, 'dy', new_pt.y - prev_pt.y); 
 
    tspan.textContent = myChar; 
 
    return tspan; 
 

 
}
<svg id="mySVG" width="450" height="200" viewBox="0 0 900 400" 
 
    xmlns="http://www.w3.org/2000/svg" 
 
    xmlns:xlink="http://www.w3.org/1999/xlink"> 
 
    <defs> 
 
    <path id="MyPath" 
 
      d="M 100 200 
 
      C 200 100 300 0 400 100 
 
      C 500 200 600 300 700 200 
 
      C 800 100 900 100 900 100" /> 
 
    </defs> 
 

 
    <use id="curve" xlink:href="#MyPath" fill="none" stroke="red" /> 
 

 
    <text x="90" y="200" id="origText" font-family="Verdana" font-size="36">We go up, then we go down, then up again</text> 
 

 
</svg>