webForumDet fria alternativet

Få fram koordinater

JavaScript

6 svar · 431 visningar · startad av Gein

Medlem sedan sep. 20005 700 inlägg
Frågan#1

Hur får jag fram muspekarkoordinater vid ett event. Ska fungera för Firefox 1.0.2!
Både event och window.event är odefinierade. :q

Medlem sedan aug. 20039 340 inlägg
#2

I Mozilla så finns inte event-objektet. Istället skickas event-egenskaperna med som ett argument till den funktion som du använder som event-hanterare, tex:

// Denna funktionen är en event-hanterare för ett mousmove-event
function handleMouseMove(e){
  alert(e.clientX)
}

Använder du en mouseover som attribut till body eller en div kan du istället komma åt detta objekt genom arguments[0]:

<div id="foo" onmousemove="alert(arguments[0].clientX)">

X kan såklart bytas ut mot Y för att få Y-koordinaten. Du kan även byta ut client mot andra saker för att få ut koordinaten beräknad från olika punkter på skärmen. Här finns hela listan: http://www.mozilla.org/docs/dom/domref/dom_event_ref.html

Medlem sedan apr. 20003 174 inlägg
#3

En variant, använd x och y för koordinaterna.

[red]<script type="text/javascript">

	document.onmousemove = fMouseMove;
	var objBrowser = new fBrowser();
	function fBrowser()
	{
		var ua, s, i;
		this.isIE = false;
		this.isNS = false;
		this.version = null;
		ua = navigator.userAgent;
		s = "MSIE"; if ((i = ua.indexOf(s)) >= 0){this.isIE = true;this.version = parseFloat(ua.substr(i + s.length));return;}
		s = "Netscape6/"; if ((i = ua.indexOf(s)) >= 0){this.isNS = true;this.version = parseFloat(ua.substr(i + s.length));return;}
		s = "Gecko"; if ((i = ua.indexOf(s)) >= 0){this.isNS = true;this.version = 6.1;return;}
	}

	function fMouseMove(event)
	{
		if (objBrowser.isIE)
		{
			x = (window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft);
			y = (window.event.clientY + document.documentElement.scrollTop + document.body.scrollTop);
		}
		if (objBrowser.isNS)
		{
			x = (event.clientX + window.scrollX);
			y = (event.clientY + window.scrollY);
		}
		window.status = x +' x '+ y
	}
	
</script>[/red]
Medlem sedan sep. 20005 700 inlägg
#4

document.onmousemove = fMouseMove;
Förstår jag det rätt om event-egenskaperna automatiskt skickas med även fast jag inte anger något argument till funktionen? Säg att hanteraren tar 2 argument, event-egenskaperna och t.ex. en sträng. Är det isåfall underförstått att det första argumentet är eventet eller? Tänker jag fel?

Medlem sedan aug. 20039 340 inlägg
#5

Argumenten du skickar till en funktion, tex foo(10,30,20) lagras alltid i den lokala arrayn arguments. Detta oavsett vad som står i funktionsdefinitionen. fMouseMove i ditt exempel kommer att anropas inifrån mozilla, och får därmed bara ett argument skickat till sig.

Medlem sedan sep. 20005 700 inlägg
#6

nitro2k01 skrev:

Argumenten du skickar till en funktion, tex foo(10,30,20) lagras alltid i den lokala arrayn arguments. Detta oavsett vad som står i funktionsdefinitionen. fMouseMove i ditt exempel kommer att anropas inifrån mozilla, och får därmed bara ett argument skickat till sig.

Förlåt, det var jag som missuppfattade koden lite. Nu är jag med! Tack så mycket för hjälpen. Återkommer om fler problem dyker upp ;)

Medlem sedan sep. 20005 700 inlägg
#7

En liten fråga angående samma problem.
På en <span> har jag nu onMouseDown="start(this);"
I funktionen start vill jag sedan få fram X- och Y-värdet. Hur gör jag det på bästa sätt? Jag lade in en fMouseDown som handler som satte koordinaterna till globala variabler men efter ett test visar det sig att start-funktionen körs före fMouseDown och då får den alltså inte rätt värde.

262 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
131 ms — ändringar (db)