SVG – Learning by Coding

[ sXBL-simplebutton.svg --> Grafik anzeigen ]

  1: 
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
  2: 
<!--

  3: 
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.2//EN" 

  4: 
  "http://www.w3.org/Graphics/SVG/1.2/DTD/svg12.dtd">

  5: 
-->

​  6:   7: 
<!-- SVG Learning by Coding http://www.datenverdrahten.de/svglbc/ -->

  8: 
<!--    AuthorDrThomas Meinike 09/04 thomas@handmadecode.de     -->

​  9:  10: 
<svg xmlns="http://www.w3.org/2000/svg" version="1.2"

 11: 
     xmlns:xbl="http://www.w3.org/2004/xbl"

 12: 
     xmlns:xlink="http://www.w3.org/1999/xlink"

 13: 
     xmlns:ev="http://www.w3.org/2001/xml-events"

 14: 
     xmlns:svglbc="http://www.datenverdrahten.de/svglbc">

​ 15:  16: 
  <title>SVG Learning by Coding</title>

 17: 
  <desc>SVG-Spezifikation in Beispielen</desc>

​ 18:  19: 
  <defs>

​ 20:  21: 
    <xbl:xbl><!-- statt extensionDefs -->

​ 22:  23: 
      <xbl:definition name="svglbc:simplebutton"><!-- statt elementDef -->

​ 24:  25: 
        <xbl:template><!-- statt prototype -->

​ 26:  27: 
          <!-- Gruppe aus zwei Rechtecken und einem Textelement -->

 28: 
          <g>

 29: 
            <rect id="unten"/>

 30: 
            <rect id="oben"/>

 31: 
            <text id="txt"><xbl:content/></text><!-- statt refContent -->

 32: 
          </g>

​ 33:  34: 
        </xbl:template>

​ 35:  36: 
        <xbl:handlerGroup><!-- statt script -->

 37: 
          <!-- Element handler ist neu in SVG 1.2 -->

 38: 
          <handler ev:event="xbl:bound" type="text/javascript">

 39: 
            <![CDATA[

​ 40:  41: 
            var svgdoc,el,st,ru,ro,tx,x,y,bb,bh,bf,th,tf,at;

​ 42:  43: 
            // Daten zum aktuellen simplebutton-Element abfragen

 44: 
            el=evt.target;

 45: 
            st=el.xblShadowTree// statt el.shadowTree

​ 46:  47: 
            ru=st.getElementById("unten");

 48: 
            ro=st.getElementById("oben");

 49: 
            tx=st.getElementById("txt");

​ 50:  51: 
            x=el.getAttribute("x");   // Button-x

 52: 
            y=el.getAttribute("y");   // Button-y

 53: 
            bb=el.getAttribute("bb"); // Button-Breite

 54: 
            bh=el.getAttribute("bh"); // Button-Hoehe

 55: 
            bf=el.getAttribute("bf"); // Button-Farbe

 56: 
            th=el.getAttribute("th"); // Text-Hoehe

 57: 
            tf=el.getAttribute("tf"); // Text-Farbe

 58: 
            at=el.getAttribute("at"); // Alert-Text (onclick)

​ 59:  60: 
            // Rechteck - unten

 61: 
            ru.setAttribute("x",parseFloat(x)+parseFloat(bb)/35);

 62: 
            ru.setAttribute("y",parseFloat(y)+parseFloat(bb)/35);

 63: 
            ru.setAttribute("width",bb);

 64: 
            ru.setAttribute("height",bh);

 65: 
            ru.setAttribute("rx","5");

 66: 
            ru.setAttribute("fill","#CCC");

​ 67:  68: 
            // Rechteck - oben

 69: 
            ro.setAttribute("x",x);

 70: 
            ro.setAttribute("y",y);

 71: 
            ro.setAttribute("width",bb);

 72: 
            ro.setAttribute("height",bh);

 73: 
            ro.setAttribute("fill",bf);

 74: 
            ro.setAttribute("rx","5");

 75: 
            ro.setAttribute("onclick","alert('"+at+"')");

 76: 
            ro.setAttribute("onmouseover","SetOp(evt,0.5)");

 77: 
            ro.setAttribute("onmouseout","SetOp(evt,1.0)");

​ 78:  79: 
            // Buttontext

 80: 
            tx.setAttribute("fill",tf);

 81: 
            tx.setAttribute("font-size",th);

 82: 
            tx.setAttribute("text-anchor","middle");

 83: 
            tx.setAttribute("pointer-events","none");

 84: 
            tx.setAttribute("x",parseFloat(x)+parseFloat(bb)/2);

 85: 
            tx.setAttribute("y",parseFloat(y)+parseFloat(bh)/2+parseFloat(th)/3);

​ 86:  87: 
            ]]>

 88: 
          </handler>

 89: 
        </xbl:handlerGroup>

​ 90:  91: 
      </xbl:definition>

​ 92:  93: 
    </xbl:xbl>

​ 94: ​ 95:  96: 
    <script type="text/javascript">

 97: 
      <![CDATA[

​ 98:  99: 
      // separate Funktion zum Aufruf aus dem sXBL-Kontext

​100: 101: 
      function SetOp(evt,op)

102: 
      {

103: 
        var obj,cnodes,i;

104: 
        obj=evt.target.parentNode;

105: 
        cnodes=obj.childNodes;

106: 
        for(i=0;i<cnodes.length;i++)

107: 
        {

108: 
          if(cnodes.item(i).nodeType==1)cnodes.item(i).setAttribute("opacity",op);

109: 
        }

110: 
      }

​111: 112: 
      ]]>

113: 
    </script>

​114: 115: 
  </defs>

​116: 117: 
  <text x="20" y="30" style="fill: #000; font-size: 24px">

118: 
    sXBL SVG's XML Binding Language (Ersatz für RCC)</text>

119: 
  <text x="20" y="60" style="fill: #F00">

120: 
    zurzeit noch nicht in SVG-Viewern implementiert</text>

​121: 122: 
  <a xlink:href="http://www.w3.org/TR/sXBL/" target="_top">

123: 
    <text x="20" y="80" style="fill: #00C">- Details im aktuellen sXBL-Working Draft

124: 
      <set attributeName="fill" attributeType="CSS" to="#F00" begin="mouseover"/>

125: 
      <set attributeName="fill" attributeType="CSS" to="#00C" begin="mouseout"/>

126: 
    </text>

127: 
  </a>

​128: 129: 
  <a xlink:href="../?code=rcc-simplebutton&amp;znr=on" target="_top">

130: 
    <text x="20" y="100" style="fill: #00C">- siehe Beispiel rcc-simplebutton.svg

131: 
      <set attributeName="fill" attributeType="CSS" to="#F00" begin="mouseover"/>

132: 
      <set attributeName="fill" attributeType="CSS" to="#00C" begin="mouseout"/>

133: 
    </text>

134: 
  </a>

​135: 136: 
  <!-- Aufruf der selbst definierten Element-Objekte -->

137: 
  <svglbc:simplebutton x="20" y="110" bb="100" bh="50" bf="#FCC"

138: 
    tf="#000" th="12" at="Hallo Button 1!">Text 1</svglbc:simplebutton>

139: 
  <svglbc:simplebutton x="170" y="90" bb="180" bh="90" bf="#CFC"

140: 
    tf="#00C" th="36" at="Hallo Button 2!">Text 2</svglbc:simplebutton>

141: 
  <svglbc:simplebutton x="100" y="230" bb="150" bh="80" bf="#CCF"

142: 
    tf="#C00" th="24" at="Hallo Button 3!">Text 3</svglbc:simplebutton>

​143: 144: 
</svg>

[zum Anfang]