wenn ich timeout verwende geht das Script nicht mehr

Pullmann

Erfahrenes Mitglied
HI,

ich habe da ein für mich unerklärliches Problem das bei diesem Script auftritt

HTML:
function startDrag(id){
	var mouse_x = event.clientX + document.body.scrollLeft;
	var mouse_y = event.clientY + document.body.scrollTop;
	
	var image = document.getElementById("im_"+id);
	var div = document.getElementById("img_"+id);

	div.style.left=(mouse_x-(image.width/2))+"px";
	div.style.top=(mouse_y-(image.height/2))+"px";
	
	var timer = setTimeout("startDrag("+ id +")",50);	
}

also das Script geht aber nur wenn ich den Timer weglasse, denn sonst kommt die Fehlermeldung das in Zeile 7, hier Zeile 1, Zeichen 2 ein Objekt erforderlich ist.
Was ist denn da der Fehler?
 
Zuletzt bearbeitet:
Hi,

die Variable id ist eine Variable und muss deshalb in single quotes übergeben werden.
Code:
var timer = setTimeout("startDrag('"+ id +"')",50);
Ciao
Quaese
 
Hi,

ich muss mich korrigieren. Wenn du der Funktion die ID als Integerwert übergibst, kannst du auch
auf die single quotes verzichten.

Das Problem liegt vielmehr darin begründet, als ab dem ersten Aufruf der Funktion startDrag über
setTimeout das Objekt event nicht mehr definiert ist - schliesslich wird die Routine nicht mehr
durch ein Ereignis aufgerufen.
Du könntest jedoch versuchen, die Mausbewegung in einer eigenen Funktion zu ermitteln und bei
Bedarf die Werte auszulesen.
Code:
var timer;
var mouseX, mouseY;

// Wird ausgeführt, wenn die Maus bewegt wird
function getPos(ereignis) {
  // Aktuelle Mauskoordinaten bei Mausbewegung ermitteln
  mouseX = document.all ? window.event.clientX : ereignis.pageX;
  mouseY = document.all ? window.event.clientY : ereignis.pageY;
}

function startDrag(id){
  var mouse_x = mouseX + document.body.scrollLeft;
  var mouse_y = mouseY + document.body.scrollTop;

  var image = document.getElementById("im_"+id);
  var div = document.getElementById("img_"+id);

  div.style.left=(mouse_x-(image.width/2))+"px";
  div.style.top=(mouse_y-(image.height/2))+"px";

  timer = window.setTimeout("startDrag("+ id +")",50);
}

// Mausbewegung überwachen
document.onmousemove = getPos;
Vielleicht hilft dir das weiter.

Ciao
Quaese
 

Neue Beiträge

Zurück