Hi Thomas,
die Länge habe ich mit getTotalLength() ausgelesen und Die Variablen lese ich mit XSLT aus. Das funktioniert. Allerdings nur für ein Objekt, da ich in der Java Script Funktion den Namen des getElementById expilzit angebe.
Hier kommt die JS- Funktion:
<script type="text/ecmascript">
function onInit(){
var objText = document.getElementById("obj_2_meta").firstChild.data;
var objSymbol = document.getElementById("obj_2_symbol1").firstChild.data;
var pathElement = document.getElementById(objText );
var pathLength = pathElement.getTotalLength();
var textElement = document.getElementById("obj_2_testText");
var textPath = document.getElementById("obj_2_testTextPath");
textPath.setAttribute("xlink:href", "#"+objText);
var tspan = document.getElementById("obj_2_tspanOh");
tspan.setAttribute('letter-spacing', pathLength/80);
var tspanText = tspan.getFirstChild();
for(var i=0; i < pathLength; i+=pathLength/80)
{
tspanText .appendData(objSymbol);
}
}
</script>
Das Template sieht wie folgt aus:
<xsl:template name="meta">
<xsl:param name="style1"/>
<xsl:param name="symbol"/>
<xsl:param name="dy"/>
<metadata>
<xsl:attribute name="id"><xsl:value-of select="@gml:id"/>xsl:text_meta</xsl:text></xsl:attribute><xsl:value-of select="@gml:id"/>
</metadata>
<metadata>
<xsl:attribute name="id"><xsl:value-of select="@gml:id"/>xsl:text_symbol1</xsl:text></xsl:attribute><xsl:value-of select="$symbol"/>
</metadata>
<g>
<xsl:attribute name="id">
<xsl:value-of select="@gml:id"/>
xsl:text_textAufPfad</xsl:text>
</xsl:attribute>
<text>
<xsl:attribute name="id">
<xsl:value-of select="@gml:id"/>
xsl:text_testText</xsl:text>
</xsl:attribute>
<textPath>
<xsl:attribute name="id">
<xsl:value-of select="@gml:id"/>
xsl:text_testTextPath</xsl:text>
</xsl:attribute>
<xsl:attribute name="xlink:href"></xsl:attribute>
<tspan>
<xsl:attribute name="id">
<xsl:value-of select="@gml:id"/>
xsl:text_tspanOh</xsl:text>
</xsl:attribute>
<xsl:attribute name="class">
<xsl:value-of select="$style1"/>
</xsl:attribute>
<xsl:attribute name="dy">
<xsl:value-of select="$dy"/>
</xsl:attribute>
xsl:text </xsl:text>
</tspan>
</textPath>
</text>
</g>
</xsl:template>
Die Textabschnitte nach den ID's sind nötig, da es somnst zum Konflikt kommt mit Pfaden, die die zuvor generiert werden. Diese hätten dann die gleiche ID.
Ich hoffe der Code ist nicht allzu unübersichtlich....
Beste Grüße
andi
Hallo,
Nun habe ich in SVG eine Javascript- Funktion geschrieben. Diese ermittelt die Länge eines Pfades in SVG.
Dafuer gibt es im SVG-DOM die vorgefertigte Methode getTotalLength() fuer path-Objekte.
Nun benötige ich aber diese ID's für die Java Script Funktion. Gibt es daher eine Möglichkeit dynamisch die ID's auszulesen?
Abfrage von id-Attributwerten je nach Kontext: <xsl:value-of select="@id"/>
Wenn noch mehr Code benötigt wird, lasst es mich wissen.
Waere durchaus angebracht. Vielleicht sind die IDs gar nicht noetig und es laesst sich z. B. eine Gruppe definieren, die die path-Elemente kapselt. Der Zugriff waere dann mit getElementsByTagName() realisierbar.
MfG, Thomas