webForumDet fria alternativet

Få fram koordinater

6 svar · 429 visningar · startad av Gein

GeinMedlem sedan sep. 20005 700 inlägg
#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

nitro2k01Medlem sedan aug. 20039 342 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

PalleMedlem 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]
GeinMedlem 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?

nitro2k01Medlem sedan aug. 20039 342 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.

GeinMedlem 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 ;)

GeinMedlem 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.

139 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)