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
Få fram koordinater
6 svar · 429 visningar · startad av Gein
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
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]
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?
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.
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 ;)
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.