Gregor Schilling: komisches Verhalten - strange SVG

Hallo,

Ich habe 2 html Dateien mit einer übersichtlichen SVG impl., von denen eine funktioniert und die andere nicht:

Hier ist die, die funktioniert:

good.html

  
<html>  
  
<script type="text/javascript">  
  
    function check_rect_onmouseover(evt,num) {  
      var name = "check_marker_" + num;  
      var e = document.getElementById(name);  
        e.setAttribute("opacity", 0.5 );  
    }  
    function check_rect_onmouseout(evt,num) {  
      var name = "check_marker_" + num;  
      var e = document.getElementById(name);  
      e.setAttribute("opacity", parent.testing );  
    }  
  
    function check_marker_onmouseover(evt,num) {  
	evt.target.setAttribute("opacity",0.5);	  
    }  
    function check_marker_onmouseout(evt,num) {  
        evt.target.setAttribute("opacity", parent.testing );  
    }  
  
  
</script>  
<body>  
  
<svg  
   	xmlns:dc="http://purl.org/dc/elements/1.1/"  
		xmlns:cc="http://creativecommons.org/ns#"  
		xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"  
		xmlns:svg="http://www.w3.org/2000/svg"  
		xmlns="http://www.w3.org/2000/svg"  
		xmlns:xlink="http://www.w3.org/1999/xlink"  
		xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"  
		xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"  
		version="1.1"  
		width="100%"  
		height="100%"  
		id="svg2985"  
		sodipodi:docname="check_button_stencil.svg">  
<rect  
	onclick="check_rect_onclick(evt,1)"  
	onmouseover="check_rect_onmouseover(evt,1)"  
	onmouseout="check_rect_onmouseout(evt,1)"  
	onload="check_rect_init(evt,1)"  
	width="32"  
	height="32"  
	rx="9"  
	ry="9"  
	x="0"  
	y="32"  
	id="check_rect_1  
"	style="fill:#FFFFFF;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />  
<path  
        onmouseover="check_rect_onmouseover(evt,1)"  
	inkscape:connector-curvature="0"  
	d="m 15,42 c -64.97804,-26.0529 -14.91981,-13.649 3.13004,14.7949 12.51411,-50.4176 53.15077,-110.968 -3.13004,-14.7949z"  
	id="check_marker_1"  
	style="fill:#000000;fill-opacity:1;stroke:none" />  
  
  
</svg>  
</body>  
</html>  

Es ist ein einfacher Kasten bei dem der Haken beim rübergehen mit der Mouse transparent wird.

Jetzt dachte ich, na toll, dann mache ich eben noch so eine Datei:

bad.html

  
<html>  
  
<script type="text/javascript">  
  
function Qover(evt,num)  
{  
       evt.target.setAttribute("opacity", 0.5 );  
       document.getElementById("menubuttoncolor_1").setAttribute("opacity",0.5);  
}  
  
</script>  
<body>  
  
<svg  
   	xmlns:dc="http://purl.org/dc/elements/1.1/"  
		xmlns:cc="http://creativecommons.org/ns#"  
		xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"  
		xmlns:svg="http://www.w3.org/2000/svg"  
		xmlns="http://www.w3.org/2000/svg"  
		xmlns:xlink="http://www.w3.org/1999/xlink"  
		xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"  
		xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"  
		version="1.1"  
		width="100%"  
		height="100%"  
		id="svg2985"  
		sodipodi:docname="check_button_stencil.svg">  
  <rect  
     onmouseover="Qover(evt,1)"  
     style="opacity:1;fill:#b9b9b9;stroke:none"  
     id="menubuttoncolor_1"  
     width="60"  
     height="35"  
     x="0"  
     y="0"  
     rx="4.7572179"  
     ry="4.995079" />  
  
</svg>  
</body>  
</html>  

Die nicht funktioniert, in beiden Fällen werden die Funktionen definitiv aufgerufen, aber bei dem bad.html Beispiel passiert gar nichts. Nachdem ich jetzt seit 5h immer versuche heraus zu finden warum oder evtl. Bugs zu finden bin ich sprachlos. Evtl ist es ein ganz einfacher Fehler, den ich nicht mehr erkenne, darum hoffe ich auf dein paar Augen.

Vielen Dank und warum funktioniert das bei der einen Datei und warum bei der anderen nicht, ich bin total Fassungslos?

Grus,

Gregor.

  1. Moin,

    Vielen Dank und warum funktioniert das bei der einen Datei und warum bei der anderen nicht, ich bin total Fassungslos?

    Also bei der zweiten Datei habe ich den Code folgendermaßen geändert:

    function Qover(e)  
    {  
    e.style.opacity = 0.4;  
    }
    
    <rect  
         onmouseover="Qover(this)" [...]  
    />
    

    Da gehts. Dein Javascript-Code ist also falsch, das weiß ich, was aber genau falsch ist, kann ich nicht ganz genau sagen; das würde ich jemand anders überlassen ;)

    Guckst du.

    Grüße Marco

    1. Moin,

      Vielen Dank und warum funktioniert das bei der einen Datei und warum bei der anderen nicht, ich bin total Fassungslos?
      Also bei der zweiten Datei habe ich den Code folgendermaßen geändert:

      function Qover(e)

      {
      e.style.opacity = 0.4;
      }

      
      >   
      > ~~~html
      
      <rect  
      
      >      onmouseover="Qover(this)" [...]  
      > />
      
      

      Da gehts. Dein Javascript-Code ist also falsch, das weiß ich, was aber genau falsch ist, kann ich nicht ganz genau sagen; das würde ich jemand anders überlassen ;)

      Guckst du.

      Grüße Marco

      ja, danke. Komisch, dass es überhaupt funktionert.

  2. Es ist ein einfacher Kasten bei dem der Haken beim rübergehen mit der Mouse transparent wird.

    OT / 2: Warum machst Du das mit javascript? Mach es doch mit svg-eigenen Mitteln.
    http://www.selfsvg.info/?section=9.4

    1. Es ist ein einfacher Kasten bei dem der Haken beim rübergehen mit der Mouse transparent wird.

      OT / 2: Warum machst Du das mit javascript? Mach es doch mit svg-eigenen Mitteln.
      http://www.selfsvg.info/?section=9.4

      Jo danke. Ich hatte erst alles in SVG nach den WC3 tuts geschrieben, dann mit verschiedenen Browsern getestet und bei Chrome und Firefox an irgend einer Stelle unterschiedliches Verhalten fest gestellt und das Problem nicht verstanden. Beim Umweg über javascript lief alles prima, bis auf den beschriebenen Fehler (Der am falschen Javacode liegt).

      Da meine mit Inkskape exportierten SVG Dateien auch teilweise nicht richtig von den Browsern dargstellt werden (was ich wieder nicht vestehe, da es sich um einfach Kreise ohne jeglichen Farbverlauf etc. handelt, nur handelt sich um ein einfaches fill), lasse ich jetzt erstmal die Finger von SVG. Ich mache jetzt alles mit Javascript.

      Gruss,

      Gregor.

      1. Da meine mit Inkskape exportierten SVG Dateien auch teilweise nicht richtig von den Browsern dargstellt werden (was ich wieder nicht vestehe, da es sich um einfach Kreise ohne jeglichen Farbverlauf etc. handelt, nur handelt sich um ein einfaches fill), lasse ich jetzt erstmal die Finger von SVG. Ich mache jetzt alles mit Javascript.

        Ja, die Implementierung bei erzeugenden und wiedergebenden Programmen ist noch mangelhaft.