SVG – Learning by Coding
1:
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
2:
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
3:
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
4:
<!ATTLIST svg xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink">
5:
]>
6: 7:
<!-- SVG - Learning by Coding - http://www.datenverdrahten.de/svglbc/ -->
8:
<!-- Author: Dr. Thomas Meinike 03/03 - thomas@handmadecode.de -->
9: 10:
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
11:
onload="getSVGDoc(evt);createMenues()">
12: 13:
<title>SVG - Learning by Coding</title>
14:
<desc>SVG-Spezifikation in Beispielen</desc>
15: 16:
<defs>
17: 18:
<style type="text/css">
19:
<![CDATA[
20: 21:
rect.haupt
22:
{
23:
fill: #FFC;
24:
stroke: #000;
25:
stroke-width: 2px;
26:
}
27: 28:
rect.unter
29:
{
30:
fill: #EEF;
31:
stroke: #000;
32:
stroke-width: 1px;
33:
}
34: 35:
text.haupt
36:
{
37:
fill: #00C;
38:
font-size: 12px;
39:
text-anchor: middle;
40:
pointer-events: none;
41:
}
42: 43:
text.unter
44:
{
45:
fill: #000;
46:
font-size: 11px;
47:
text-anchor: middle;
48:
pointer-events: none;
49:
}
50: 51:
a text.unter
52:
{
53:
fill: #F00;
54:
pointer-events: inherit;
55:
}
56: 57:
]]>
58:
</style>
59: 60: 61:
<script type="text/javascript">
62:
<![CDATA[
63: 64:
var svgdoc,svgroot;
65: 66: 67:
function getSVGDoc(load_evt)
68:
{
69:
svgdoc=load_evt.target.ownerDocument;
70:
svgroot=svgdoc.documentElement;
71:
}
72: 73: 74:
function createMenues()
75:
{
76:
var menues,hlinks,target,menue_x,menue_y,menue_b,menue_h,haupt_out,haupt_over,unter_out,unter_over,dx,dy;
77:
var haupt_g,haupt_r,haupt_t,haupt_txt,haupt_s1,haupt_s2,haupt_s3,haupt_s4;
78:
var unter_g,unter_r,unter_t,unter_txt,unter_s1,unter_s2,unter_s3,unter_s4,unter_s5,unter_s6,unter_a;
79:
var svgns="http://www.w3.org/2000/svg";
80: 81: 82:
// Arrays fuer die Menuepunkte und die Links
83:
menues=new Array();
84:
hlinks=new Array();
85: 86:
// Vorgaben fuer Positionen und Farben - Anfang
87:
menue_x=20; // Menue x (erstes Rechteck)
88:
menue_y=60; // Menue y (erstes Rechteck)
89:
menue_b=100; // Breite der Rechtecke fuer Haupt- und Untermenues
90:
menue_h=20; // Hoehe der Rechtecke fuer Haupt- und Untermenues
91:
haupt_out="#FFC"; // Mouseout-Farbe der Hauptmenuepunkte (=Grundfarbe, siehe CSS-Klasse rect.haupt)
92:
haupt_over="#FF0"; // Mouseover-Farbe der Hauptmenuepunkte
93:
unter_out="#EEF"; // Mouseout-Farbe der Untermenuepunkte (=Grundfarbe, siehe CSS-Klasse rect.unter)
94:
unter_over="#CFC"; // Mouseover-Farbe der Untermenuepunkte
95:
dx=50; // x-Versatz der Menuetexte
96:
dy=15; // y-Versatz der Menuetexte
97:
target="_top"; // Linkziel
98:
// Vorgaben fuer Positionen und Farben - Ende
99: 100: 101:
// Menuetexte der n Menues und URLs der n Links festlegen - Anfang
102:
// Schema:
103:
// menues[0 bis n-1]=new Array("Hauptmenuetext","Untermenuetext_1",...,"Untermenuetext_n");
104:
// Hier: 3 Hauptmenuepunkte mit 5/3/1 Untermenuepunkten
105:
// hlinks[0 bis n-1]=new Array("url_1",...,"url_n");
106:
// wenn kein Link erscheinen soll, einen Leerstring "" angeben
107:
// Hier: im 1. Untermenue ist Menuepunkt 4, im 2. Untermenue Menuepunkt 1 verlinkt
108: 109:
menues[0]=new Array("Hauptmenü 1","Untermenü 1.1","Untermenü 1.2","Untermenü 1.3","Untermenü 1.4","Untermenü 1.5");
110:
hlinks[0]=new Array("","","","http://www.styleassistant.de","");
111:
menues[1]=new Array("Hauptmenü 2","Untermenü 2.1","Untermenü 2.2","Untermenü 2.3");
112:
hlinks[1]=new Array("http://www.datenverdrahten.de","","");
113:
menues[2]=new Array("Hauptmenü 3","Untermenü 3.1");
114:
hlinks[2]=new Array("");
115: 116:
// Menuetexte der n Menues und URLs der n Links festlegen - Ende
117: 118: 119:
// Menuestruktur dynamisch aufbauen - Anfang
120:
for(i=0;i<menues.length;i++)
121:
{
122:
// Hauptmenues mit Eintraegen erzeugen - Anfang
123:
haupt_g=svgdoc.createElementNS(svgns,"g");
124:
haupt_g.setAttribute("id","men"+parseInt(i+1));
125: 126:
haupt_r=svgdoc.createElementNS(svgns,"rect");
127:
haupt_r.setAttribute("x",menue_x+i*menue_b);
128:
haupt_r.setAttribute("y",menue_y);
129:
haupt_r.setAttribute("width",menue_b);
130:
haupt_r.setAttribute("height",menue_h);
131:
haupt_r.setAttribute("class","haupt");
132: 133:
haupt_s1=svgdoc.createElementNS(svgns,"set");
134:
haupt_s1.setAttribute("attributeName","fill");
135:
haupt_s1.setAttribute("attributeType","CSS");
136:
haupt_s1.setAttribute("to",haupt_over);
137:
haupt_s1.setAttribute("begin","mouseover");
138: 139:
haupt_s2=svgdoc.createElementNS(svgns,"set");
140:
haupt_s2.setAttribute("attributeName","fill");
141:
haupt_s2.setAttribute("attributeType","CSS");
142:
haupt_s2.setAttribute("to",haupt_over);
143:
haupt_s2.setAttribute("begin","umen"+parseInt(i+1)+".mouseover");
144: 145:
haupt_s3=svgdoc.createElementNS(svgns,"set");
146:
haupt_s3.setAttribute("attributeName","fill");
147:
haupt_s3.setAttribute("attributeType","CSS");
148:
haupt_s3.setAttribute("to",haupt_out);
149:
haupt_s3.setAttribute("begin","mouseout");
150: 151:
haupt_s4=svgdoc.createElementNS(svgns,"set");
152:
haupt_s4.setAttribute("attributeName","fill");
153:
haupt_s4.setAttribute("attributeType","CSS");
154:
haupt_s4.setAttribute("to",haupt_out);
155:
haupt_s4.setAttribute("begin","umen"+parseInt(i+1)+".mouseout");
156: 157:
haupt_t=svgdoc.createElementNS(svgns,"text");
158:
haupt_t.setAttribute("x",menue_x+i*menue_b+dx);
159:
haupt_t.setAttribute("y",menue_y+dy);
160:
haupt_t.setAttribute("class","haupt");
161:
haupt_txt=svgdoc.createTextNode(menues[i][0]);
162: 163:
haupt_r.appendChild(haupt_s1);
164:
haupt_r.appendChild(haupt_s2);
165:
haupt_r.appendChild(haupt_s3);
166:
haupt_r.appendChild(haupt_s4);
167:
haupt_t.appendChild(haupt_txt);
168:
haupt_g.appendChild(haupt_r);
169:
haupt_g.appendChild(haupt_t);
170:
// Hauptmenues mit Eintraegen erzeugen - Ende
171: 172: 173:
// Gruppe fuer die Untermenuepunkte des i-ten Hauptmenues - Anfang
174:
unter_g=svgdoc.createElementNS(svgns,"g");
175:
unter_g.setAttribute("id","umen"+parseInt(i+1));
176:
unter_g.setAttribute("style","display: none");
177: 178:
unter_s1=svgdoc.createElementNS(svgns,"set");
179:
unter_s1.setAttribute("attributeName","display");
180:
unter_s1.setAttribute("attributeType","CSS");
181:
unter_s1.setAttribute("to","block");
182:
unter_s1.setAttribute("begin","men"+parseInt(i+1)+".mouseover");
183: 184:
unter_s2=svgdoc.createElementNS(svgns,"set");
185:
unter_s2.setAttribute("attributeName","display");
186:
unter_s2.setAttribute("attributeType","CSS");
187:
unter_s2.setAttribute("to","none");
188:
unter_s2.setAttribute("begin","men"+parseInt(i+1)+".mouseout");
189:
// Gruppe fuer die Untermenuepunkte des i-ten Hauptmenues - Ende
190: 191: 192:
// Untermenuepunkte fuer das i-te Hauptmenue - Anfang
193:
for(j=1;j<menues[i].length;j++)
194:
{
195:
unter_r=svgdoc.createElementNS(svgns,"rect");
196:
unter_r.setAttribute("x",menue_x+i*menue_b);
197:
unter_r.setAttribute("y",menue_y+j*menue_h);
198:
unter_r.setAttribute("width",menue_b);
199:
unter_r.setAttribute("height",menue_h);
200:
unter_r.setAttribute("class","unter");
201:
if(hlinks[i][j-1]=="")unter_r.setAttribute("onclick","MenueAktion('"+parseInt(i+1)+"."+j+"')");
202: 203:
unter_s3=svgdoc.createElementNS(svgns,"set");
204:
unter_s3.setAttribute("attributeName","fill");
205:
unter_s3.setAttribute("attributeType","CSS");
206:
unter_s3.setAttribute("to",unter_over);
207:
unter_s3.setAttribute("begin","mouseover");
208: 209:
unter_s4=svgdoc.createElementNS(svgns,"set");
210:
unter_s4.setAttribute("attributeName","fill");
211:
unter_s4.setAttribute("attributeType","CSS");
212:
unter_s4.setAttribute("to",unter_out);
213:
unter_s4.setAttribute("begin","mouseout");
214: 215:
unter_s5=svgdoc.createElementNS(svgns,"set");
216:
unter_s5.setAttribute("attributeName","fill");
217:
unter_s5.setAttribute("attributeType","CSS");
218:
unter_s5.setAttribute("to",unter_over);
219:
unter_s5.setAttribute("begin","link"+i.toString()+j.toString()+".mouseover");
220: 221:
unter_s6=svgdoc.createElementNS(svgns,"set");
222:
unter_s6.setAttribute("attributeName","fill");
223:
unter_s6.setAttribute("attributeType","CSS");
224:
unter_s6.setAttribute("to",unter_out);
225:
unter_s6.setAttribute("begin","link"+i.toString()+j.toString()+".mouseout");
226: 227:
unter_t=svgdoc.createElementNS(svgns,"text");
228:
unter_t.setAttribute("x",menue_x+i*menue_b+dx);
229:
unter_t.setAttribute("y",menue_y+j*menue_h+dy);
230:
unter_t.setAttribute("class","unter");
231:
unter_txt=svgdoc.createTextNode(menues[i][j]);
232: 233:
unter_a=svgdoc.createElementNS(svgns,"a");
234:
unter_a.setAttributeNS("http://www.w3.org/1999/xlink","href",hlinks[i][j-1]);
235:
unter_a.setAttribute("target",target);
236:
unter_a.setAttribute("id","link"+i.toString()+j.toString());
237: 238:
unter_a.appendChild(unter_t);
239: 240:
unter_r.appendChild(unter_s3);
241:
unter_r.appendChild(unter_s4);
242:
unter_r.appendChild(unter_s5);
243:
unter_r.appendChild(unter_s6);
244:
unter_t.appendChild(unter_txt);
245: 246:
unter_g.appendChild(unter_s1);
247:
unter_g.appendChild(unter_s2);
248:
unter_g.appendChild(unter_r);
249:
if(hlinks[i][j-1])unter_g.appendChild(unter_a);
250:
else unter_g.appendChild(unter_t);
251:
haupt_g.appendChild(unter_g);
252: 253:
}
254:
// Untermenuepunkte fuer das i-te Hauptmenue - Ende
255: 256:
// Hauptmenue mit Untermenues in den DOM-Baum einhaengen
257:
svgroot.appendChild(haupt_g);
258:
}
259:
// Menuestruktur dynamisch aufbauen - Ende
260:
}
261: 262: 263:
function MenueAktion(men)
264:
{
265:
alert("Menüpunkt "+men+" wurde geklickt.");
266:
}
267: 268:
]]>
269:
</script>
270: 271:
</defs>
272: 273:
<text x="20" y="30" style="fill: #000; font-size: 24px">
274:
Pull-Down-Menü (dynamisch generierter SVG-Code)</text>
275: 276:
<text x="20" y="220" style="fill: #F00">
277:
Hinweis: Die roten Menüpunkte sind verlinkt!</text>
278: 279:
</svg>
[zum Anfang]