SVG – Learning by Coding

[ pulldownmenue_d.svg --> Grafik anzeigen ]

  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: <!--    AuthorDrThomas 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-width2px;
 26:       }
 27: 
 28:       rect.unter
 29:       {
 30:         fill#EEF;
 31:         stroke#000;
 32:         stroke-width1px;
 33:       }
 34: 
 35:       text.haupt
 36:       {
 37:         fill#00C;
 38:         font-size12px;
 39:         text-anchormiddle;
 40:         pointer-eventsnone;
 41:       }
 42: 
 43:       text.unter
 44:       {
 45:         fill#000;
 46:         font-size11px;
 47:         text-anchormiddle;
 48:         pointer-eventsnone;
 49:       }
 50: 
 51:       a text.unter
 52:       {
 53:         fill#F00;
 54:         pointer-eventsinherit;
 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]