SKiddo: jQuery: Bin ich dumm?

Hi

Ich wollte gerade nur etwas kleines ausprobieren und doch schein ich mich im Kreis zu drehen. Ich weiß nicht warum das hier:

  
          if(dist < 100)  
          {  
	    $("#bla").animate({"opacity": "1"}, "slow");  
          } else {  
	    $("#bla").animate({"opacity": "0"}, "slow");  
          }

nicht funktioniert.

Wenn ich 2 ifs daraus mache und einen auskommentiere, funktioniert das wunderbar. Die if-Abfrage wird über ein setTimtout kontinuierlich abgerufen, dist verändert sich, die Werte stimmen. Wie gesagt, wenn ich da nur

  
          if(dist < 100)  
          {  
	    $("#bla").animate({"opacity": "1"}, "slow");  
          }  

stehen habe, klappt alles wunderbar.

Der entgegengesetzte Fall liefert auch keinerlei Probleme, nur zusammen stimmt da was nicht. Falls mich jemand auf meine Blind-/Dummheit hinweisen könnte, wäre ich demjenigen sehr verbunden. Falls ihr dafür mehr Informationen braucht, bin ich gerne bereit euch diese zu liefern.

Danke
Skiddo.

  1. Guten Morgen!

    Du könntest noch nachliefern, was der Unterschied zwischen "klappt wunderbar" und "stimmt da was nicht" ist. Ich kann hier leider nicht sehen, was bei Dir passiert und was nicht.

    Schöne Grüße,

    Peter

  2. Hallo, SKiddo!

    Ich sehe zwar ebenfalls nicht, wo der Fehler liegen soll, aber warum machst Du es Dir so kompliziert?

    $('#bla').animate({opacity: dist < 100 ? 1 : 0});

    ...ist doch viel einfacher.

    Gruß, LX

    --
    RFC 1925, Satz 2: Egal, wie fest man schiebt, ganz gleich, wie hoch die Priorität ist, man kann die Lichtgeschwindigkeit nicht erhöhen.
  3. Ich wollte gerade nur etwas kleines ausprobieren und doch schein ich mich im Kreis zu drehen.

    Ich hab zwar keine Ahnung was du damit meinst, aber möglicherweise scheiterst du an der "dist"-Verzweigung, weil die Animation noch läuft und sie unterdessen wieder ausgeführt wird.

    ggf. hilft es, die Animation auf jedenfall vorher anzuhalten, das geht mit stop() (den optionalen Parameter beachten) vor dem animate() in der chain.

  4. Hallo Community,

    Danke für eure Tipps, ich bin aber von alleine auf den Trichter gekommen.

    Das Problem war, das die Funktion immer wieder mit einem setTimeout aufgerufen wurde, immer mit neuen Werten für dist. Deswegen konnte es vorkommen das dist beim ersten Aufruf 99, beim zweiten 98, beim dritten 97 und so weiter hatte. Das alles hat das .animate jedesmal neu gestartet, was natürlich zu keinem sichtbarem Effekt geführt hat.

    Gelöst habe ich es jetzt so:

      
    	if(($("#bla").queue("fx") == 0) && (dist > 100))  
    	{  
    	  if($("#bla").css("opacity") == "1")  
    	  {  
                $("#bla").animate({"opacity": "0"});  
    	  }  
    	}  
    	else if(($("#bla").queue("fx") == 0) && (dist < 100))  
    	{  
    	  if($("#bla").css("opacity") == "0")  
    	  {  
                $("#bla").animate({"opacity": "1"});  
    	  }  
    	}  
    
    

    Bin mir nicht sicher ob das so der schönste Code ist, auf jeden Fall funktioniert das so :)

    Schönen Abend noch, Skiddo.

    1. Danke für eure Tipps,

      ... die du vermutlich nichtmal gelesen hast.

      ich bin aber von alleine auf den Trichter gekommen.

      Das wäre nicht notwendig gewesen, wenn du die Antworten gelesen hättest.

      Das Problem war, das die Funktion immer wieder mit einem setTimeout aufgerufen wurde, immer mit neuen Werten für dist.

      Sagte ich das nicht?

      Bin mir nicht sicher ob das so der schönste Code ist, auf jeden Fall funktioniert das so :)

      Ja, denn ich habe dir dein schöne Lösung genannt - in Kombination mit LX' Vorschlag ist das ein 1-Zeiler.