User1989: Rechnen mit variable

Hallo
warum kann ich denn nicht mit dieser Variable rechnen?

  
var 1 = window.getComputedStyle  
(document.getElementById("package"),null).getPropertyValue("opacity");

Wenn ich zum Beispiel var 1 + 0.2 eingebe, wird mir z.B., wenn der opacity wert 0.5 ist in css, 0.50.2 angezeigt... Ich habe auch versucht var 1 vor dem addieren mit parseFloat in eine Kommazahl umzuwandeln, hat aber nicht geklappt.

  1. Hi,

    Ich habe auch versucht var 1 vor dem addieren mit parseFloat in eine Kommazahl umzuwandeln, hat aber nicht geklappt.

    Dann hast du wohl was falsch gemacht. Also noch was anderes, als einen ungültigen Variablenbezeichner zu verwenden.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
  2. Hallo,

    Ich habe auch versucht var 1 vor dem addieren mit parseFloat in eine Kommazahl umzuwandeln, hat aber nicht geklappt.

    Hast du mal die Hinweise ausprobiert, die dir in dem vorherigen Thread gegeben wurden?

    Bitte poste mal den korrekten Code, der dein Problem veranschaulicht. Bitte prüfe vorher, ob er funktioniert oder ob in der Fehlerkonsole Exceptions auftauchen.

    Mathias

  3. Mahlzeit User1989,

    var 1 = window.getComputedStyle

    Du willst eine Variable mit dem Namen "1" bezeichnen?

    <http://de.selfhtml.org/javascript/sprache/regeln.htm#namen@title=Keine gute Idee.>

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:& n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. Hallo,

      Du willst eine Variable mit dem Namen "1" bezeichnen?

      <http://de.selfhtml.org/javascript/sprache/regeln.htm#namen@title=Keine gute Idee.>

      1 ist kein gültiger Identifier, aber dieser Abschnitt von SELFHTML ist grob fehlerhaft und sollte besser nicht verlinkt werden. Die genauen Regeln sind viel freizügiger: http://es5.github.com/#x7.6. Erlaubt sind $ und _ als Sonderzeichen sowie unzählige Buchstaben und Ziffern der in Unicode vertretenen Schriftsysteme und weitere Kombinatoren und Diakritika. Das erste Zeichen muss jedoch tatsächlich ein Buchstabe, _ oder $ sein (wobei Buchstabe eben nicht A-Z bedeutet).

      Mathias

    2. Mahlzeit User1989,

      var 1 = window.getComputedStyle

      Du willst eine Variable mit dem Namen "1" bezeichnen?

      <http://de.selfhtml.org/javascript/sprache/regeln.htm#namen@title=Keine gute Idee.>

      MfG,
      EKKi

      Nur einen Wert. Er tut so, als wäre die Variable akt_wert ein String. Er kettet es einfach hinter den 0.05 an, sprich: 0.0510, zum Beispiel. Kopier doch den Code einfach in eine HTML Datei, dann siehst du was ich meine.

      Richtig, das alert war für Testzwecke.

      1. Mahlzeit User1989,

        var 1 = window.getComputedStyle

        Du willst eine Variable mit dem Namen "1" bezeichnen?

        Nur einen Wert.

        Informiere Dich über die von Dir verwendeten Begriffe. Mittels des Schlüsselworts "var" definierst Du eine Variable. Punkt. Ausrufezeichen! Und ein Bezeichner wie "1" für eine Variable ist ungültig.

        Aber das hast Du ja offenbar bereits akzeptiert, da Du in Deinem nächsten Posting die Variable stillschweigend "akt_wert" nennst.

        Er tut so, als wäre die Variable akt_wert ein String.

        Er? Und "er" tut nicht nur so - offenbar liefert die Methode "getPropertyValue()" einen String als Rückgabewert ... <http://de.selfhtml.org/javascript/sprache/operatoren.htm#typeof@title=überprüfe das!>

        Er kettet es einfach hinter den 0.05 an, sprich: 0.0510, zum Beispiel.

        Ja sicher. <http://de.selfhtml.org/javascript/sprache/operatoren.htm#zeichenkettenverknuepfung@title=Der Operator +> dient bei Zeichenketten zur Verknüpfung. Die diversen Hinweise und Lösungsvorschläge aus Deinem anderen Thread konnten Dir bei der Lösung des Problems nicht helfen?

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:& n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        1. Mahlzeit User1989,

          var 1 = window.getComputedStyle

          Du willst eine Variable mit dem Namen "1" bezeichnen?

          Nur einen Wert.

          Informiere Dich über die von Dir verwendeten Begriffe. Mittels des Schlüsselworts "var" definierst Du eine Variable. Punkt. Ausrufezeichen! Und ein Bezeichner wie "1" für eine Variable ist ungültig.

          Aber das hast Du ja offenbar bereits akzeptiert, da Du in Deinem nächsten Posting die Variable stillschweigend "akt_wert" nennst.

          Er tut so, als wäre die Variable akt_wert ein String.

          Er? Und "er" tut nicht nur so - offenbar liefert die Methode "getPropertyValue()" einen String als Rückgabewert ... <http://de.selfhtml.org/javascript/sprache/operatoren.htm#typeof@title=überprüfe das!>

          Er kettet es einfach hinter den 0.05 an, sprich: 0.0510, zum Beispiel.

          Ja sicher. <http://de.selfhtml.org/javascript/sprache/operatoren.htm#zeichenkettenverknuepfung@title=Der Operator +> dient bei Zeichenketten zur Verknüpfung. Die diversen Hinweise und Lösungsvorschläge aus Deinem anderen Thread konnten Dir bei der Lösung des Problems nicht helfen?

          MfG,
          EKKi

          Okay selbst wenn er einen String liefern sollte, wie zum Beispiel 0.7, dann müsste man doch diese 0.7 mit parseFloat(akt_wert) auf die Zahl 0.7 umwandeln können, aber nicht einmal das klappt. Habe ich nämlich ausprobiert, auch wenn der Code parseFloat nicht in meinem Post hier steht.

          1. Habe es jetzt überprüft. Ist tatsächlich ein String. Trotzdem sollte dieser String mit parseFloat umwandelbar sein in eine Zahl. Klappt leider nicht.
            Der Befehl scheint ignoriert zu werden, denn die Konsole gibt auch keine Fehlermeldung.

          2. Mahlzeit User1989,

            Okay selbst wenn er einen String liefern sollte, wie zum Beispiel 0.7, dann müsste man doch diese 0.7 mit parseFloat(akt_wert) auf die Zahl 0.7 umwandeln können,

            Kann man auch.

            aber nicht einmal das klappt.

            "Klappt nicht" klappt nicht.

            *Was genau* hast Du versucht? Wie sieht Dein aktueller, nicht funktionierender Code an der Stelle aus?

            Habe ich nämlich ausprobiert, auch wenn der Code parseFloat nicht in meinem Post hier steht.

            OK. Damit Deine Leser Dir bei der Ursachenforschung sinnvoll helfen können, solltest Du aber Deine Versuche zeigen. Ansonsten sind potentielle Helfer aufs Raten angewiesen und das funktioniert prinzipbedingt nur in den seltensten Fällen ...

            MfG,
            EKKi

            --
            sh:( fo:| ch:? rl:( br:& n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
            1. Der code schaut genauso aus, wie ich ihn hier gepostet habe, nur dass unter akt_wert = document.getComputedStyle... steht parseFloat(akt_wert).
              Er rechnet aber immer noch so, als wäre akt_wert ein String. Vielleicht sollte ich noch sagen, dass der opacity wert in css 0.05 ist(für firefox).

              1. Mahlzeit User1989,

                Der code schaut genauso aus, wie ich ihn hier gepostet habe, nur dass unter akt_wert = document.getComputedStyle... steht parseFloat(akt_wert).

                Genau so? In einer Zeile? Also:

                parseFloat(akt_wert)

                Richtig?

                Dann frage ich mich gerade ernsthaft, ob Du uns alle hier verarschen willst. Wenn Dir die in Deinem anderen Thread gegebenen Antworten von Cheatah, Der Martin und ChrisB nicht weitergeholfen haben, hättest Du dort vielleicht mal nachfragen sollen. Zumindest aber hättest Du in SELFHTML mal zum Thema "http://de.selfhtml.org/javascript/objekte/unabhaengig.htm#parse_float@title=parseFloat()" nachschlagen können. Dort steht im ersten Satz, was die Funktion tut und wie sie funktioniert (insbesondere, wo und wie der in eine Zahl verwandelte Wert zu erwarten ist).

                Wenn Du nicht in der Lage bist, Dokumentationen und Nachschlagewerke zu lesen und zu verstehen, ist Programmieren vielleicht nicht so ganz das Richtige für Dich.

                Er rechnet aber immer noch so, als wäre akt_wert ein String.

                Natürlich tut er das. Weil sich in der Variablen namens "akt_wert" immer noch ein String befindet, solange Du der Variablen keinen anderen Wert zuweist.

                Vielleicht sollte ich noch sagen, dass der opacity wert in css 0.05 ist(für firefox).

                Nein, das ist unnötig. Viel dringender erforderlich wäre Verständnis für die von Dir verwendeten Technologien.

                MfG,
                EKKi

                --
                sh:( fo:| ch:? rl:( br:& n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
  4. var zaehler = 0;  
    var akt_wert = 0;  
      
    function fadeIn(){  
    akt_wert = window.getComputedStyle(document.getElementById("package"), null).getPropertyValue("opacity");  
    erhoeheopacity(akt_wert);}	  
      
    function erhoeheopacity(trnzp_wert){  
    	akt_wert = trnzp_wert;  
    		alert(akt_wert);  
    		for(var z = akt_wert; z < 1; z += 0.05){  
    			akt_wert += 0.05;  
    			document.getElementById("package").style.opacity  
                            +=akt_wert;  
    			setTimeout("erhoeheopacity(akt_wert)", 500);}}	
    

    Oben seht ihr den Code. Wie gesagt, er addiert die Werte nicht. Wieso?
    Das Programm sollte ja alle 0,5 Sekunden sich selbst aufrufen und opacity um
    0.05 erhöhen, bis die 1 erreicht ist.

    1. Mahlzeit User1989,

        	setTimeout("erhoeheopacity(akt\_wert)", 500);}}	  
      

      Oben seht ihr den Code. Wie gesagt, er addiert die Werte nicht. Wieso?

      Vermutlich, weil der Aufruf von "erhoeheopacity(akt_wert)" nicht wie erwartet funktioniert - eventuell hast Du das <http://de.selfhtml.org/javascript/objekte/window.htm#set_timeout@title="Beachten Sie:"> nicht beachtet.

      Du hast ja - wahrscheinlich zu Debug-Zwecken - eh schon ein alert() eingebaut ... was gibt das denn aus?

      MfG,
      EKKi

      --
      sh:( fo:| ch:? rl:( br:& n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    2. @@User1989:

      nuqneH

      Das Programm sollte ja alle 0,5 Sekunden sich selbst aufrufen und opacity um
      0.05 erhöhen, bis die 1 erreicht ist.

      BTW, warum bastelst du mit JavaScript an etwas rum, was moderne Browser mit CSS können?

      Qapla'

      --
      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
      (Mark Twain)
      1. @@User1989:

        nuqneH

        Das Programm sollte ja alle 0,5 Sekunden sich selbst aufrufen und opacity um
        0.05 erhöhen, bis die 1 erreicht ist.

        BTW, warum bastelst du mit JavaScript an etwas rum, was moderne Browser mit CSS können?

        Qapla'

        Moderne Browser können mit CSS einen Fade in Effekt erzeugen?

    3. Hallo,

      function fadeIn(){
      akt_wert = window.getComputedStyle(document.getElementById("package"), null).getPropertyValue("opacity");
      erhoeheopacity(akt_wert);}

      Du verwendest hier parseFloat nicht, wie es dir geraten wurde, also ist akt_wert ein String.

      akt_wert = parseFloat(akt_wert);

      wandelt den Wert der Variable akt_wert in eine Zahl um und schreibt diesen Wert zurück in die Variable.

        	akt\_wert += 0.05;  
      

      Hier hängst du dem String eine Number an, dadurch wird die Number zu einem String umgewandelt. Ist der akt_wert vorher "0.5", ist akt_wert nun "0.50.05".

        	document.getElementById("package").style.opacity  
      

      +=akt_wert;

      Hier hängst du dem aktuellen opacity-Wert (ein String) akt_wert (ein String) an. Ist der opacity-Wert vorher "0.5", so hängst du ihm nun "0.50.05" an, sodass der opacity-Wert nun "0.50.50.05" ergibt.

      Hier musst du einfach eine Zuweisung mit = vornehmen, nicht noch einmal += verwenden:

      document.getElementById("package").style.opacity = akt_wert;

      Wenn du an der richtigen Stelle parseFloat verwendest, so kannst du auch Zahlen addieren.

      Der +-Operator in JavaScript addiert Zahlen, er verknüpft aber auch Strings. Beide Operanden müssen Zahlen sein, damit er sie addiert. Wenn ein Operand ein String ist, wird auch der andere in einen String umgewandelt und die beiden Strings werden verkettet.

      Ferner hast du anscheinend noch nicht ganz verstanden, wie eine Animation funktioniert. Du kannst hier nicht mit einer for-Schleife arbeiten. Die Animation funktioniert einfach so, dass sich die Animier-Funktion mit setTimeout immer wieder selbst verzögert aufruft. Wenn das Ziel erreicht ist, dann ruft sie sich einfach nicht mehr auf. Du rufst allerdings zusätzlich setTimeout in einer Schleife auf, was zur Animation nichts beiträgt.

      Es geht viel einfacher ohne diese Schleife. Ein Beispiel:

      <!DOCTYPE html>  
      <p id="package" style="opacity: 0">foo</p>  
      <script>  
        
      [code lang=javascript]function fadeIn (element) {  
        var opacity = getComputedStyle(element, null).opacity;  
        opacity = parseFloat(opacity);  
        animateOpacity(element, opacity);  
      }  
        
      fadeIn(document.getElementById("package"));  
        
      function animateOpacity (element, opacity) {  
        if (opacity >= 1) return; // Breche ab, wenn 1 erreicht wurde  
        opacity += 0.05;  
        element.style.opacity = opacity;  
        setTimeout(function () {  
          animateOpacity(element, opacity);  
        }, 500);  
      }
      

      </script>[/code]

      Mathias