JavaScript jQuery "Zeiteinstellung" bei Endlosschleife

the-unknown

Ensign
Registriert
Sep. 2011
Beiträge
170
Hallo.

Wieder eine schwer findbare gescheite Überschrift. Sorry dafür.

Zum Problem:
Ich mache eine Animation mit jQuery. Ich will eine Landschaft in einer bestimmten Zeit durchs Bild scrollen, wenn diese Animation fertig ist soll er ohne Übergang und Stocken wieder bei 0 anfangen.

Hier mal mein bisheriger Code, wo er dann nur einen Durchgang macht.
HTML:
<!DOCTYPE html>
<html>
	<head>
		<title>

		</title>
		
		<style type="text/css">
			
	

			
			#landschaft{
				position:absolute;top:0px;left:0px;
				background-image: url(../Auftrag%20eins%20Bilder/landschaft%20lang.png);
width:3500px;
height:400px;
z-index:2;
}

#wald {
position:absolute;top:0px;left:/*295*/0px;
background-image:url(../Auftrag%20eins%20Bilder/landschaft%20lang%20jquery.png);
width:1690px;
height:400px;
z-index:1;
}
			#Himmel{

position:absolute;top:0px;left:/*295*/0px;
background-image:url(../Auftrag%20eins%20Bilder/Himmel.jpg);
width:1798px;
height:400px;
z-index:0;
}
			#bahn{

position:absolute;top:0px;left:/*295*/0px;
background-image:url(../Auftrag%20eins%20Bilder/zug%20jquery.png);
width:550px;
height:400px;
z-index:3;
}

		</style>
		
        <script language="JavaScript"> function newWindow(URL) { myPopup=window.open(URL,'popupWindow','toolbar=0,location=0,' + 'directories=0,status=0,menubar=0,resizable=0,scrollbars=0,' + 'width=550,height=400,left=20,top=50'); } </script> 
        
	</head>
	<body>
    <a href="#">
    
    
    <div class="Himmel" id="Himmel">
    </div>
    <div class="wald" id="wald">
    </div>
    <div id="bahn" class="bahn">
      </div>
    
   	  <div class="landschaft" id="landschaft">
      </div>
      
        
		<script type="text/javascript" src="Scripts/jquery.js"></script>
		
		<script type="text/javascript">
		
		$(document).ready(function(){
			
			$("a").click(function(){
								
				$("#landschaft").animate({marginLeft: "-2950px"}, 40000, "linear");
				$("#wald").animate({marginLeft: "-1140px"}, 40000,"linear");
				$("#bahn").animate({marginLeft: "575px"}, 40000, "linear");
				$("#Himmel").animate({marginLeft: "-1248px"}, 40000, "linear");
			});
		});
		
		</script>
	</body>
</html>

Im Zusammenhang bin ich auf folgenden Code gestoßen, bei dem ich denke, er sollte hilfreich sein.
HTML:
<!DOCTYPE html>
<html>
	<head>
		<title>
		</title>
		
		<style type="text/css">		</style>
		
        
        
	</head>
	<body>
     
     
    	<div id="box"></div>
		<div id="box2"></div>



		<script type="text/javascript" src="Scripts/jquery.js"></script>
		<script type="text/javascript">
		
		$(document).ready(function(){
		
			$("div").css({
			"width": 150,
			"height": 150,
			"marginBottom": 20,
			"background": "blue"
			})

		$("div").click(function(){
	

		<!--Endlosschleife mit Plsieren-->
		jQuery.fn.pulsieren = function(){
		$(this).each(function(){
		if (this.zustand) {
		this.zustand = 0;
		$(this)
		.animate({
		"marginLeft": 0
		},
		function(){
		$(this).pulsieren();
		});
		} else {
		this.zustand = 1;
		$(this).animate({
		"marginLeft": 300,
		},
		function(){
		$(this).pulsieren();
		});
		}
		});
		}
 
		$("#box, #box2").pulsieren();


		});
		
		});
		
		</script>
	</body>
</html>

Diesen Code wollte ich nutzen, um die normale Animation in einer bestimmten Zeit ablaufen zu lassen, und dann innerhalb von 0s am Ende im 2. Schritt das Bild wieder auf Start zu setzten, um es aufs neue zu animieren.

Nun das Hauptproblem:
Ich bekomme es irgendwie nicht hin, die Zeit für die Animation einzufügen. Er schmeißt in Dreamweaver immer Fehler raus.
Für mein Empfinden sollte es ungefähr so aussehen:
HTML:
		<script type="text/javascript" src="Scripts/jquery.js"></script>
		<script type="text/javascript">
		
		$(document).ready(function(){
		
			$("div").css({
			"width": 150,
			"height": 150,
			"marginBottom": 20,
			"background": "blue"
			})

		$("div").click(function(){
	

		<!--Endlosschleife mit Plsieren-->
		jQuery.fn.pulsieren = function(){
		$(this).each(function(){
		if (this.zustand) {
		this.zustand = 0;
		$(this)
		.animate({
		"marginLeft": 0
		},
		400,);
		function(){
		$(this).pulsieren();
		});
		} else {
		this.zustand = 1;
		$(this).animate({
		"marginLeft": 3000
		},
		400,);
		function(){
		$(this).pulsieren();
		});
		}
		});
		}
 
		$("#box, #box2").pulsieren();


		});
		
		});
		
		</script>

Vllt findet ihr ja den Fehler. Ich komme nicht drauf.

Grüße
 
Hi,

ich empfehle den Code mal mit http://www.jslint.com/
zu prüfen, damit solltest du schon die meisten Fehler beseitigen.

<!--Endlosschleife mit Plsieren-->
Würde ich schonmal durch //Endlosschleife mit Plsieren oder /*Endlosschleife mit Plsieren*/ ersetzen ist ja javascript Code und kein HTML

Ansonsten habe ich mir den Code mal leserlich gemacht und da passt so einiges mit den Klammern nicht, das solltest du als erstes überprüfen....das mit den Klammern ist meine Vermutung, stecke im Javascript nicht ganz so drin

Viel Erfolg
 
Zuletzt bearbeitet:
danke, werde das mal probieren. bin leider auch kein spezi, habe das meiste durch googlen und so hinbekommen. nur hier hakt es.

als hinweis evtl: nur der letzte part funktioniert nicht. alle anderen klappen wie gewünscht.
Ergänzung ()

kann noch wer helfen?

der link hilft leider gar nicht. danach ist alles ein fehler. vllt kapier ich die fehler auch nich, weil ich bisher kaum ahnung von javascript habe. auf jeden fall haut der viele fehler raus, selbst bei einem script das funktioniert, und aus einem tuturial kommt
 
Sehe ich das richtig und du hast eine rekursive Endlosschleife? Das wird dann irgendwann zum Programmabsturz führen - je nach Browser früher oder später. Ich würde das Ganze über ein Intervall versuchen und am Ende des Intervalls die Positionen der Objekte wieder auf den Anfangswert setzen. Der Trick dürfte dann sein, die unterschiedlichen Bewegungsgeschwindigkeiten etc. zu synchronisieren, so dass man den Übergang nicht sieht.
 
das ist schon mal ein tip, daran werde ich mich mal wagen. danke erstmal. werde über den (mis)erfolg berichten ;)
Ergänzung ()

hat geklappt, musste zwar etwas googlen, bis ichs richtig kapiert habe, aber es funktioniert top. danke dir für den super tip :daumen:
 
Zurück
Oben