WinFuture-Forum.de: Javascript Problem: Object In Object Bewegen - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
  • 3 Seiten +
  • 1
  • 2
  • 3

Javascript Problem: Object In Object Bewegen

#16 Mitglied ist offline   Graumagier 

  • Gruppe: aktive Mitglieder
  • Beiträge: 8.811
  • Beigetreten: 01. März 04
  • Reputation: 1
  • Geschlecht:Männlich
  • Wohnort:Graz, Österreich

geschrieben 01. März 2007 - 13:19

Iso sagte:

Das mit den offset klappt irgendwie nicht, wenn ich nämlich manuell die Höhe und Breite der box eintrage, funktioniert alles, beim offset fliegt das kleine Rechteck einfach unendlich weit nach unten rechts ...

Welcher Browser? Ich poste mal den Quelltext der bei mir rausgekommen ist:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
	<head>
		<title>opdracht 2a</title>
		<script type="text/javascript">
		var x = 10;
		var y = 10;
		var height = 0;
		var width = 0;
		var xTempo = 5;
		var yTempo = 5;
		
		function init() {
			height = getObj("box").offsetHeight;
			
			width = getObj("box").offsetWidth;
			startAnimation();
		}
		
		function startAnimation(){
			setInterval("animate()",10);
		}
		
		function animate(){
			
			if(x>=width){
				xTempo = -5;
			}
			if(x<=0){
				xTempo = 5;
			}
			if(y>=height){
				yTempo = -5;
			}
			if(y<=0){
				yTempo = 5;
			}
			
			x += xTempo;
			y += yTempo;
			shiftTo();
		}
		
		function shiftTo() {
			getObj('rect').style.left = x + "px";
			getObj('rect').style.top = y + "px";
		}
		
		function getObj(elementID){
			return document.getElementById(elementID);
		}
		
		</script>
		
		<style type="text/css">
			#box { background: navy; height: 300px; width: 400px; z-index: 1; }
			#rect { background: yellow; height: 20px; width: 20px; z-index: 2; position:relative; }
		</style>
	</head>
	<body>
	
	<div id="box">
	<div id="rect"></div>
	</div>
	
	<a href="java script:init()">Start</a>
	</body>
</html>


"If you make something idiot proof, someone will invent a better idiot." - Marvin

For Emails always use OpenPGP. My KeyID: 0xA1E011A4
0

Anzeige



#17 Mitglied ist offline   Iso 

  • Gruppe: aktive Mitglieder
  • Beiträge: 487
  • Beigetreten: 14. Mai 03
  • Reputation: 0
  • Wohnort:Hörstel
  • Interessen:Computer<br />Parties<br />Mädels...

geschrieben 01. März 2007 - 14:44

Asooo ... ich hab ja auch style.offsetHeight bzw. width gemacht -.-
Jetzt funktionierts ;)
Danke
Asus F3JP-Z53 Notebook:
Intel Core 2 Duo T7200 @ 2 Ghz
Mobile Radeon X1700 256 MB
2048 MB DDR2-Ram
160 GB Hitachi HDD
Ubuntu 9.04 / Windows XP SP 3
0

#18 Mitglied ist offline   Iso 

  • Gruppe: aktive Mitglieder
  • Beiträge: 487
  • Beigetreten: 14. Mai 03
  • Reputation: 0
  • Wohnort:Hörstel
  • Interessen:Computer<br />Parties<br />Mädels...

geschrieben 01. März 2007 - 15:15

Ich bins schon wieder,
nämlich soll man in dem zweiten Teil der Aufgabe das Programm so umändern, dass 8 Rechtecke in dem großen Rechteck umherfliegen.
D.h. man muss pro Rechteck ein Object erzeugen und in diesem Fall am besten von startanimation die Object erstellen ( rect1 = new startAnimation() ), jedoch muss man noch eine Klasse animate erstellen, wodrin mit den ganzen Variablen gehandelt wird und auch die Funktion AnimateGo für das setIntervall anzutreffen ist.

Hier mal meine Lösung, jedoch spuckt mir die FF-Extension Firebug folgenden Fehler an:
"Animate is not defined by setInterval("Animate.animateGo",10)"

Hier mein Quellcode:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
	<head>
		<title>opdracht 2b</title>
		&lt;script type="text/javascript">
		
		function init(){
			height = getObj('box').offsetHeight;
			width = getObj('box').offsetWidth;
			Rect1 = new startAnimation("rect1","yellow",0,0);
			Rect2 = new startAnimation("rect2","red",20,20);
			Rect3 = new startAnimation("rect3","blue",40,40);
			Rect4 = new startAnimation("rect4","green",60,40);
		}
		
		function startAnimation(rect, color, STop, SLeft){
			var Animate = new animate();
			
			getObj(rect).style.background = color;
			getObj(rect).style.top = STop + "px";
			getObj(rect).style.left = SLeft + "px";
			
			Animate.rect = rect;
			setInterval("Animate.animateGo()",10);
			
			}
			
		function animate(){
		
			var x = 0;
			var y = 0;
			var xTempo = 5;
			var yTempo = 5;
			this.rect = 0;
			
			this.animateGo = function(){
				if(x >= width){
					xTempo = -5;
				}
				if(x <= 0){
					xTempo = 5;
				}
				if(y >= height){
					yTempo = -5;
				}
				if(y <= 0){
					yTempo = 5;
				}
				x += xTempo;
				y += yTempo;
				
				getObj(rect).style.left = x + "px";
				getObj(rect).style.top = y + "px";
			}
				
		}		
		
		function getObj(elementID){
			return document.getElementById(elementID);
		}
		</script>
		
		<style type="text/css">
			#box { background: navy; height: 300px; width: 400px; z-index: 1; }
			.rect { position: relative; background: navy; height: 20px; width: 20px; z-index: 2; }
		</style>
	</head>
	<body>
	
	<div id="box">
	<div id="rect1" class="rect"></div>
	<div id="rect2" class="rect"></div>
	<div id="rect3" class="rect"></div>
	<div id="rect4" class="rect"></div>
	</div>
	
	<a href="java script:init()">Start</a>
	</body>
</html>

Dieser Beitrag wurde von Iso bearbeitet: 01. März 2007 - 15:17

Asus F3JP-Z53 Notebook:
Intel Core 2 Duo T7200 @ 2 Ghz
Mobile Radeon X1700 256 MB
2048 MB DDR2-Ram
160 GB Hitachi HDD
Ubuntu 9.04 / Windows XP SP 3
0

#19 Mitglied ist offline   Graumagier 

  • Gruppe: aktive Mitglieder
  • Beiträge: 8.811
  • Beigetreten: 01. März 04
  • Reputation: 1
  • Geschlecht:Männlich
  • Wohnort:Graz, Österreich

geschrieben 01. März 2007 - 15:24

Definiere animateGo() mal auf normalem Wege...
"If you make something idiot proof, someone will invent a better idiot." - Marvin

For Emails always use OpenPGP. My KeyID: 0xA1E011A4
0

#20 Mitglied ist offline   Iso 

  • Gruppe: aktive Mitglieder
  • Beiträge: 487
  • Beigetreten: 14. Mai 03
  • Reputation: 0
  • Wohnort:Hörstel
  • Interessen:Computer<br />Parties<br />Mädels...

geschrieben 01. März 2007 - 15:33

Dann hab ich aber das Problem mit den Variablen, da ich ein Object brauche, welche die Variablen initialisiert, und eine Funktion die dann diese Werte ändert.
Oder verstehe ich da noch etwas nicht richtig und denke zu Objektorientiert ....
Asus F3JP-Z53 Notebook:
Intel Core 2 Duo T7200 @ 2 Ghz
Mobile Radeon X1700 256 MB
2048 MB DDR2-Ram
160 GB Hitachi HDD
Ubuntu 9.04 / Windows XP SP 3
0

#21 Mitglied ist offline   Graumagier 

  • Gruppe: aktive Mitglieder
  • Beiträge: 8.811
  • Beigetreten: 01. März 04
  • Reputation: 1
  • Geschlecht:Männlich
  • Wohnort:Graz, Österreich

geschrieben 01. März 2007 - 16:05

Da sehe ich kein Problem, verschachtelte Schleifen existieren bei JS :angry:
"If you make something idiot proof, someone will invent a better idiot." - Marvin

For Emails always use OpenPGP. My KeyID: 0xA1E011A4
0

#22 Mitglied ist offline   Iso 

  • Gruppe: aktive Mitglieder
  • Beiträge: 487
  • Beigetreten: 14. Mai 03
  • Reputation: 0
  • Wohnort:Hörstel
  • Interessen:Computer<br />Parties<br />Mädels...

geschrieben 01. März 2007 - 16:12

Wie kommste denn nu auf Schleifen?
Jetzt haste mich voll durcheinander gebracht :angry:
Asus F3JP-Z53 Notebook:
Intel Core 2 Duo T7200 @ 2 Ghz
Mobile Radeon X1700 256 MB
2048 MB DDR2-Ram
160 GB Hitachi HDD
Ubuntu 9.04 / Windows XP SP 3
0

#23 Mitglied ist offline   Graumagier 

  • Gruppe: aktive Mitglieder
  • Beiträge: 8.811
  • Beigetreten: 01. März 04
  • Reputation: 1
  • Geschlecht:Männlich
  • Wohnort:Graz, Österreich

geschrieben 01. März 2007 - 16:15

Ne, ich meinte verschachtelte Funktionen :angry:
"If you make something idiot proof, someone will invent a better idiot." - Marvin

For Emails always use OpenPGP. My KeyID: 0xA1E011A4
0

#24 Mitglied ist offline   Iso 

  • Gruppe: aktive Mitglieder
  • Beiträge: 487
  • Beigetreten: 14. Mai 03
  • Reputation: 0
  • Wohnort:Hörstel
  • Interessen:Computer<br />Parties<br />Mädels...

geschrieben 01. März 2007 - 17:00

Verschachtelte funktionen sind doch sowas wie Object - dazugehörige Funktion, wie z.B. in meinem Fall oder wie meinste das konkret? gib mal n beispiel bitte :angry:
Asus F3JP-Z53 Notebook:
Intel Core 2 Duo T7200 @ 2 Ghz
Mobile Radeon X1700 256 MB
2048 MB DDR2-Ram
160 GB Hitachi HDD
Ubuntu 9.04 / Windows XP SP 3
0

#25 Mitglied ist offline   Graumagier 

  • Gruppe: aktive Mitglieder
  • Beiträge: 8.811
  • Beigetreten: 01. März 04
  • Reputation: 1
  • Geschlecht:Männlich
  • Wohnort:Graz, Österreich

geschrieben 01. März 2007 - 18:17

Will sagen dass "this.animateGo = function()" weder korrekt noch logisch ist, die korrekte Syntax wäre "var animateGo = new function(foo)" oder einfach "function animateGo(foo)".

Dieser Beitrag wurde von Graumagier bearbeitet: 01. März 2007 - 18:17

"If you make something idiot proof, someone will invent a better idiot." - Marvin

For Emails always use OpenPGP. My KeyID: 0xA1E011A4
0

#26 Mitglied ist offline   Iso 

  • Gruppe: aktive Mitglieder
  • Beiträge: 487
  • Beigetreten: 14. Mai 03
  • Reputation: 0
  • Wohnort:Hörstel
  • Interessen:Computer<br />Parties<br />Mädels...

geschrieben 01. März 2007 - 18:48

Laut http://webmatze.de/webdesign/javascript/ja...op_part_one.htm ist es wohl logisch, da es nämlich sich dann um eine privilegierte Methode innerhalb eines Objektes handelt

Zitat

Previligierte Methoden erstellen

Solche previligierten Methoden werden innerhalb des Konstruktors mit einem vorangestellten this definiert und können später auch von außerhalb eines Objektes aufgerufen werden.

this.getAlter = function() {
addYear();
return alter;
}

Asus F3JP-Z53 Notebook:
Intel Core 2 Duo T7200 @ 2 Ghz
Mobile Radeon X1700 256 MB
2048 MB DDR2-Ram
160 GB Hitachi HDD
Ubuntu 9.04 / Windows XP SP 3
0

#27 Mitglied ist offline   Graumagier 

  • Gruppe: aktive Mitglieder
  • Beiträge: 8.811
  • Beigetreten: 01. März 04
  • Reputation: 1
  • Geschlecht:Männlich
  • Wohnort:Graz, Österreich

geschrieben 01. März 2007 - 18:53

Jupp, hast schon Recht, war mir entfallen. Mein Fehler.
"If you make something idiot proof, someone will invent a better idiot." - Marvin

For Emails always use OpenPGP. My KeyID: 0xA1E011A4
0

#28 Mitglied ist offline   Iso 

  • Gruppe: aktive Mitglieder
  • Beiträge: 487
  • Beigetreten: 14. Mai 03
  • Reputation: 0
  • Wohnort:Hörstel
  • Interessen:Computer<br />Parties<br />Mädels...

geschrieben 01. März 2007 - 18:57

Ist ja kein Problem :angry:

Nur leider habe ich immer noch das Problem wie oben beschrieben, oder hat wer einen komplett anderen und vielleicht besseren / einfacheren Lösungsansatz?
Asus F3JP-Z53 Notebook:
Intel Core 2 Duo T7200 @ 2 Ghz
Mobile Radeon X1700 256 MB
2048 MB DDR2-Ram
160 GB Hitachi HDD
Ubuntu 9.04 / Windows XP SP 3
0

#29 Mitglied ist offline   Iso 

  • Gruppe: aktive Mitglieder
  • Beiträge: 487
  • Beigetreten: 14. Mai 03
  • Reputation: 0
  • Wohnort:Hörstel
  • Interessen:Computer<br />Parties<br />Mädels...

geschrieben 02. März 2007 - 16:54

*wink*
Asus F3JP-Z53 Notebook:
Intel Core 2 Duo T7200 @ 2 Ghz
Mobile Radeon X1700 256 MB
2048 MB DDR2-Ram
160 GB Hitachi HDD
Ubuntu 9.04 / Windows XP SP 3
0

#30 Mitglied ist offline   Iso 

  • Gruppe: aktive Mitglieder
  • Beiträge: 487
  • Beigetreten: 14. Mai 03
  • Reputation: 0
  • Wohnort:Hörstel
  • Interessen:Computer<br />Parties<br />Mädels...

geschrieben 08. März 2007 - 11:06

Kann mir denn keiner Helfen?
Ich bekomm das einfach nicht mit den Objecten fertig :)
Asus F3JP-Z53 Notebook:
Intel Core 2 Duo T7200 @ 2 Ghz
Mobile Radeon X1700 256 MB
2048 MB DDR2-Ram
160 GB Hitachi HDD
Ubuntu 9.04 / Windows XP SP 3
0

Thema verteilen:


  • 3 Seiten +
  • 1
  • 2
  • 3

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0