Newsgroup: it.comp.lang.javascript
Titolo: Posizione cursore (per ZERO)

Dopo lungo studio ed altre cose, ecco i risultati ottenuti.
Riporto lo script utilizzato, commentando le varie righe con considerazioni
e domande.
<script  type="text/javascript">
var POINT = function(x,y){this.x = x || 0;this.y = y || 0;return this};
/*Mi sconvolgeva, non avendola mai vista, l'assegnazione 'ORale'; se ho
capito bene: this.x è uguale ad x oppure a zero se x è nullo. E' così? */
function getEventCoords(e){
 var rv = new POINT(e.pageX||e.clientX||e.scrollLeft,
e.pageY||e.clientY||e.scrollTop);
/*Altro sconvolgimento per il passsaggio ORale dei parametri; anche qui,
passa quello o quelli non null? Sono di sola lettura, settati dalla
posizione del pointer? */
 if (typeof e.pageX == "undefined"){
  if (document.documentElement     // cosa identifica documentElement?&&
(document.documentElement.scrollTop || document.documentElement.scrollLeft))
{
   rv.x += document.documentElement.scrollLeft;
   rv.y += document.documentElement.scrollTop;
  }
  else if (document.body && (document.body.scrollTop ||
document.body.scrollHeight)){
   rv.x += document.body.scrollLeft;
   rv.y += document.body.scrollTop;
  }
 }
/* Perchè il doppio passggio(getEventCoords(e) e POINT())? Non bastava solo
la prima, visto che scrollLeft e Top contengono già l'informazione cercata?
*/
 rv.x = Math.floor(eval(rv.x) / eval(document.start.zoom.value) +
eval(document.start.loadx.value)) // campi di un form 'start'
 rv.y = Math.floor(eval(rv.y) / eval(document.start.zoom.value) +
eval(document.start.loady.value))
/* mia modifica per tener conto dell'ingrandimento e dell'offset della foto
originale, di cui voglio conoscere le coordinate di un punto. In altre
parole, carico una porzione di foto grande in una finestra di dimensioni
fisse; così tengo conto delle coordinate top-left della porzione caricata e
dell'ingrandimento utilizzato, avendo sempre le coordinate in pixel come se
stessi guardando la foto originale intera */
 document.mappa.pntx.value = rv.x
 document.mappa.pnty.value = rv.y
/* campi form per passaggio a php */
 return rv; // rimane solo per scopo di test (alert)
}
</script>
</head>
<body>
<form name="mappa">
<!-- Mettendo la foto nel campo input il pointer diventa quello di un link,
anzichè la freccia e non aiuta la precisione!:-)
<input name="campo" type="image" src="php.jpg"
onclick="crds=getEventCoords(event);alert(crds.x + <?echo
$loadx;?>+'x'+crds.y + <?echo $loady;?>);return false;">
-->
<img src="php.jpg"
onclick="crds=getEventCoords(event);alert(crds.x+'x'+crds.y);return false;">
<input type="hidden" name="pntx" value = crds.x><!-- coordinate x ed y
...-->
<input type="hidden" name="pnty" value = crds.y><!-- del pointer quando si
clicca -->
E' quasi tutto; anche gli altri script utilizzati funzionavano, ma avevano
qualche cosa che non mi soddisfaceva.
Questo va 'abbastanza bene' per i miei scopi, ma....
L'ideale per me sarebbe quello di caricare la foto intera in un frame con
scroll e, cliccando, ottenere le coordinate che tengano conto dello scroll
inserito, anzichè quelle rigidamente legate alle dimensioni del frame. Sarà
mai possibile?
Ora è tutto. Mi scuso per la lungaggine e ti ringrazio.
--
73 de IK2VTJ, Piero.
http://www.ardf.it
Togli/Remove 'nonvogliospam' dall'indirizzo/from address

 Ora è tutto. Mi scuso per la lungaggine e ti ringrazio.
De nada, figurati. Ogni tanto, anche io devo "rilasciare" un po' di 
codice, altrimenti poi dicono che non lo faccio mai :P
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

 E' qualcosa di similare?
Non direi, o stavolta non ho capito io.
Ho un frame 800x600 in cui vorrei inserire una foto di 4000x2000 pixel.
Attualmente con le librerie GD di php, carico una porzione di questa e con
ingrandimento (o meglio rimpicciolimento) a piacere; diciamo la porzione da
200,100 a 2000,800 con zoom= 0.5, carico solo mezza foto. Se voglio vedere
l'altra metà, devo ricaricarla.
Quando clicco in punto del frame leggo (ad esempio) 300,200 a cui sommo 200/
0.5, 100/0.5 ed ottengo 700,400; queste sono le coordinate dello stesso
punto sulla foto intera con zoom 1.
Se potessi caricare tutta la foto nel frame(con scroll=auto), mi
risparmierei la fatica ed il tempo per caricare le varie porzioni di foto,
spostandomi su di essa con le scroll bars.
Però, quando clicco in un punto, diciamo lo stesso di prima, avrò sempre
300,200, indipendentemente dalla porzione di foto visibile in quel momento.
Lo script di cui sopra non considera lo sposatmento introdotto dalle scroll
bars.
Se ci fosse una funzione che leggesse questi valori, li potrei usare per
correggere le coordinate del pointer, in modo analogo a come faccio adesso.
Spero di esser stato più chiaro, anche se, rileggendo, mi domando anch'io
cosa ho scritto!:-))


 cosa ho scritto!:-))
eheh.. sei stato abbastanza chiaro. :)


 eheh.. sei stato abbastanza chiaro. :)
Meno male che qualcuno mi capisce! :-))


 Meno male che qualcuno mi capisce! :-))
L'importante e' chiarirsi. :)


 quello forte, ad esempio:
La stessa sintassi che c'e' in PHP (conosco maggiormente questo che il 
Perl, e so che ne ha ereditato il "lessico"); non e' poco comune 
trovare "or die(errorstring)" nel codice.. il bello e' che e' 
"leggibile" :D


 Uhm.. hai problemi di sonnambulismo/schizofrenia? :)
Dormo poco e l'arteriosclerosi avanza inesorabile! :-(
Funziona tutto! Chissà perchè la prima volta non andava.
Ora riesco a:
- caricare l'immagine intera con l'ingrandimento che preferisco;
- leggere le coordinate di un punto della foto, che tengono conto dello
scroll;
- settare lo scroll per mantenere centrata l'immagine su di un punto!
Il tutto dopo aver corretto l'errore precedente.
Questo problema è ufficialmente risolto!
... sono tutti gli altri ancora da risolvere! :-(
GRAZIE!


    my $x = shift or return 'Missing parameter';
Marco, non cercare di confondermi quelle poche idee che ho quasi chiare! :-)
