SVG – Learning by Coding

[ wallclock_sync.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 06/05 thomas@handmadecode.de     -->

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

 11: 
  onload="Init(evt)">

​ 12:  13: 
  <title>SVG Learning by Coding</title>

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

​ 15:  16: 
  <defs>

​ 17:  18: 
    <script type="text/javascript">

 19: 
      <![CDATA[

​ 20:  21: 
      function Init(load_evt)

 22: 
      {

 23: 
        var svgdoc,lz,sz,kr,an,nd,udutc,ndutc_plus10s,wc,

 24: 
            svgns="http://www.w3.org/2000/svg";

​ 25:  26: 
        // SVG-Objekte zuweisen

 27: 
        svgdoc=load_evt.target.ownerDocument;

 28: 
        lz=svgdoc.getElementById("ladezeit");

 29: 
        sz=svgdoc.getElementById("startzeit");

 30: 
        kr1=svgdoc.getElementById("kreis1");

 31: 
        kr2=svgdoc.getElementById("kreis2");

​ 32:  33: 
        // Informationen zu Datum/Zeit abfragen

 34: 
        nd=new Date();

 35: 
        ndutc=getUTCDateTime(nd);

 36: 
        ndutc_plus10s=getUTCDateTime(new Date(nd.getTime()+10000));

 37: 
        wc="wallclock("+ndutc_plus10s+")";

​ 38:  39: 
        // Textausgaben

 40: 
        lz.firstChild.nodeValue+=ndutc;

 41: 
        sz.firstChild.nodeValue+="Ladezeit + 10s = "+wc;

​ 42:  43: 
        // Animation fuer Kreis 1 mit begin="10s" erzeugen

 44: 
        an=svgdoc.createElementNS(svgns,"animate");

 45: 
        an.setAttribute("attributeName","cx");

 46: 
        an.setAttribute("attributeType","XML");

 47: 
        an.setAttribute("begin","10s");

 48: 
        an.setAttribute("dur","10s");

 49: 
        an.setAttribute("from","50");

 50: 
        an.setAttribute("to","430");

 51: 
        an.setAttribute("fill","freeze");

 52: 
        kr1.appendChild(an);

​ 53:  54: 
        // Animation fuer Kreis 2 in mit begin="wallclock(...)" erzeugen

 55: 
        an=svgdoc.createElementNS(svgns,"animate");

 56: 
        an.setAttribute("attributeName","cx");

 57: 
        an.setAttribute("attributeType","XML");

 58: 
        an.setAttribute("begin",wc);

 59: 
        an.setAttribute("dur","10");

 60: 
        an.setAttribute("from","50");

 61: 
        an.setAttribute("to","430");

 62: 
        an.setAttribute("fill","freeze");

 63: 
        kr2.appendChild(an);

 64: 
      }

​ 65: ​ 66:  67: 
      function getUTCDateTime(dt)

 68: 
      {

 69: 
        var dd,mm,yyyy,hh,mi,ss;

​ 70:  71: 
        dd=dt.getUTCDate();

 72: 
        dd=(dd<10)?"0"+dd:dd;

 73: 
        mm=dt.getUTCMonth()+1;

 74: 
        mm=(mm<10)?"0"+mm:mm;

 75: 
        yyyy=dt.getUTCFullYear();

 76: 
        hh=dt.getUTCHours();

 77: 
        hh=(hh<10)?"0"+hh:hh;

 78: 
        mi=dt.getUTCMinutes();

 79: 
        mi=(mi<10)?"0"+mi:mi;

 80: 
        ss=dt.getUTCSeconds();

 81: 
        ss=(ss<10)?"0"+ss:ss;

​ 82:  83: 
        // UTC-Format YYYY-MM-DDThh:mm:ssZ erzeugen

 84: 
        return yyyy+"-"+mm+"-"+dd+"T"+hh+":"+mi+":"+ss+"Z";

 85: 
      }

​ 86: ​ 87:  88: 
      function AnimInfo(click_evt)

 89: 
      {

 90: 
        if(printNode)alert("Erzeugtes animate-Element:\n\n"+

 91: 
           printNode(click_evt.target.firstChild));

 92: 
        else alert("printNode()-Methode nicht verfuegbar.");

 93: 
      }

​ 94:  95: 
      ]]>

 96: 
    </script>

​ 97:  98: 
  </defs>

​ 99: 100: 
  <text x="20" y="30" style="font-size: 24px">

101: 
    Wallclock-Synchronisation mit UTC-Zeitwerten nach ISO 8601</text>

​102: 103: 
  <text x="30" y="55" style="font-size: 12px; fill: #000">

104: 
    Beide Kreise sollten sich nach 10s in Bewegung setzender grüne mit

105: 
    begin=&quot;10s&quot;der rote mit begin=&quot;wallclock(...)&quot;.</text>

106: 
  <text id="ladezeit" x="30" y="80"

107: 
    style="font-size: 14px; fill: #00C">Ladezeit (UTC): </text>

108: 
  <text id="startzeit" x="30" y="100"

109: 
    style="font-size: 14px; fill: #F00">Startzeit (UTC): </text>

110: 
  <text x="30" y="260" style="font-size: 12px; fill: #000">

111: 
    Zur Abfrage von Details zu den erzeugten animate-Elementen

112: 
    Kreise anklicken!</text>

​113: 114: 
  <circle id="kreis1" cx="50" cy="150" r="20" fill="#090" onclick="AnimInfo(evt)"/>

115: 
  <circle id="kreis2" cx="50" cy="210" r="20" fill="#F00" onclick="AnimInfo(evt)"/>

​116: 117: 
</svg>

[zum Anfang]