Newsgroup: it.comp.lang.javascript
Titolo: Coordinate X ed Y del mouse in un evento

Per catturare le coordinate X ed Y della freccia del mouse al verificarsi di
un evento, ho scritto queste due funzioni:
function getX() {
    return (isIE ? window.event.clientX : evt.pageX);
}
function getY() {
    return (isIE ? window.event.clientY : evt.pageY);
}
dove isIE e' precedentemente posta ad 1 se il browser in uso e' Internet
Explorer, mentre e' posta a 0 se si utilizza Netscape Navigator o Mozilla.
Queste due funzioni pero' non funzionano (cioe', funzionano male) nel caso
in cui la zona "sensibile" agli eventi e' visualizzata in una zona della
pagina visibile solo utilizzando la scrollbar verticale (cioe', in una zona
molto in basso).
Mi spiego meglio: evidentemente manca una costante additiva, che "allinei"
la coordinata ottenuta con la posizione della scrollbar verticale. Quali
sono queste costanti, in Internet Explorer ed in Netscape/Mozilla?
Grazie in anticipo.

 sono queste costanti, in Internet Explorer ed in Netscape/Mozilla?
Prova cosě:
 if(window.opera) // per Opera
  {x = e.clientX; y = e.clientY;}
 else if (document.all) // per IE4+
  {x = document.body.scrollLeft+event.clientX; y = document.body.scrollTop+event.clientY}
 else if (e.pageX) // per Netscape e Mozilla
  {x = e.pageX; y = e.pageY}
Dovrebbe accontentare tutti... :)
MaRoK

Denghiu! :)

   Netscape e Mozilla {x = e.pageX; y = e.pageY}
Ho problemi con Opera e Netscape/Mozilla... come posso avvalorare "e"?
Mi spiego: l'evento viene cosi' "scatenato":
<a href="..." onmouseover="show('ciccio')">prova</a>
...
function show(stringa)
{
    // stampa "stringa" alle coordinate del cursore
    // richiamando le funzioni da me scritte getX() e getY()
}
Ora, con Explorer tutto fila liscio, dato che "event" e' gia' definito, ma
come faccio su Opera e Netscape/Mozilla?

 come faccio su Opera e Netscape/Mozilla?
Guarda un po' qui mi sono ispirato a quello che ha detto Marok; pero' devi verificare che funzioni, attualmente ho solo IE6:
<html><head></head><body>
<script>
function getRef(id)
{
   if(document.getElementById)
      return document.getElementById(id);
   if(document.all)
      return document.all[id];
   if(document.layers)
      return document.layers[id];
   return null;
}
function mousePosition()
{
   var e=window.event;
   if(window.opera){
      this.x=e.clientX;
      this.y=e.clientY;
   }
   else if(document.all){
      this.x=document.body.scrollLeft+e.clientX;
      this.y=document.body.scrollTop+e.clientY;
   }
   else if(e.pageX){
      this.x=e.pageX;
      this.y=e.pageY;
   }
   return this;
}
function quadro()
{
   var mp=mousePosition();
   var obj=getRef('q');
   obj.style.visibility='visible';
   obj.style.left=mp.x;
   obj.style.top=mp.y;
}
</script>
<div onMouseMove="quadro()" onMouseOut="getRef('q').style.visibility='hidden'" style="width: 300; height: 100; background-color: #0000FF"></a>
<div id="q" style="position: absolute; visibility:hidden; width: 100; height: 100; background-color: #008000"></div>
</body>
</html>

Netscape segnala il seguente errore:
"window.event has no properties."

 "window.event has no properties."
Ok, scusa, perche' non bisognava mettere window.event ma solo event, comunque ho corretto anche altri errori/imprecisioni e l'ho abbastanza ottimizzato:
<html><head>
<script type="text/javascript">
function getRef(id)
{
   if(document.getElementById)
      return document.getElementById(id);
   if(document.all)
      return document.all[id];
   if(document.layers)
      return document.layers[id];
   return null;
}
function mousePosition(e)
{
   if(window.opera){
      this.x=e.clientX;
      this.y=e.clientY;
   }
   else if(document.all){
      this.x=document.body.scrollLeft+e.clientX;
      this.y=document.body.scrollTop+e.clientY;
   }
   else if(e.pageX){
      this.x=e.pageX;
      this.y=e.pageY;
   }
   return this;
}
function quadro(e)
{
   var mp=mousePosition(e);
   q100.left=mp.x;
   q100.top=mp.y;
}
function inizia()
{
   q100=getRef('q').style;
   getRef('page').style.visibility='visible';
}
</script>
</head>
<body onLoad="inizia()">
<div id="page" style="visibility:hidden">
  <div id="q" style="position:absolute;visibility:hidden;width:100;height:100;z-index:1;background-color:#008000">
  </div>
  <div onMouseMove="quadro(event)" onMouseOver="q100.visibility='visible'" onMouseOut="q100.visibility='hidden'" style="position:absolute;top:1000;width:300;height:100;z-index:0;background-color:#0000FF">
  </div>
</div>
</body>
</html>

Thanks! Perfetto ora va.
La soluzione e' in pratica passare "event" nel gestore dell'evento
(onmouseover="funzione(event,'cicciocappuccio'"))

 (onmouseover="funzione(event,'cicciocappuccio'"))
S', credo che ci siano dei problemi con NN4, non lo so...

 S', credo che ci siano dei problemi con NN4, non lo so...
Funziona anche con NN4 :)