Newsgroup: it.comp.lang.javascript
Titolo: scrolling

DESCRIZIONE SITUAZIONE:
Finestra principale con un div che contiene due pulsanti, alto e basso.
La finestra principale contiene un iframe, il quale è destinato a 
visulizzare un contenuto (testo descrittivo) contestuale a talune selezioni 
che compirà l'utente nella finestra principale.
La finestra principale presenta infatti, oltre all'iframe che deve caricare 
i contenuti ed ai pulsanti destinati allo scrolling dei contenuti 
dell'iframe, alcune immagini che su evento onMouseOver dovranno appunto 
caricare dentro l'iframe il contenuto specifico.
Ad esempio:
immagine CASA1 - rollover - descrizioneCASA1.html nell'iframe
immagine CASA2 - rollover - descrizioneCASA2.html nell'iframe
e via dicendo per tutte le immagini della finestra principale.
UNO PO' DI SCRIPTING...
I punsanti per far scrollare il testo dentro l'iframe rispondono all'evento 
onMouseOver e onMouseOut.
Prendiamo l'esempio del pulsante su (il testo sale)
onMouseOver="sali()"
che richiama la funzione sali(), eccola:
var i=0;
function sali() {
 i++;
window.descrizione.scrollTo(0,i);
   aa=setTimeout('sali()',10);
   if (i > 1485) {
   clearTimeout(aa);
   }
}
c'è da specificare che "descrizione" altro non è che il nome dell'iframe.
La seconda parte della funzione mi serve per far sì che il testo, superati i 
1485pixel corrispondenti alla lunghezza del testo, non scrolli più, ma ciò 
riguarda solo la prima pagina che carico nell'iframe, che ho chiamato 
descrizione.html (una descrizione generica).
Per fermare lo scrolling su evento onMouseOut ho richiamato questo metodo: 
clearTimeout(aa).
ANCORA SCRIPTING...
come dicevo poco più sopra la finestra principale contiene una serie di 
immagini, nella fattispecie case miniaturizzate e stilizzate, che su 
rollover devono caricarmi pagine differenti nell'iframe "descrizione".
Riporto l'esempio per l'immagine CASA1:
onMouseOver="descrizioneCasa1()"
dove la funzione richiamat è la seguente
function descrizioneCasa1() {
var nomefile = window.descrizione.location.href;
if (nomefile.lastIndexOf('/') != -1)
nomefile = nomefile.substr(nomefile.lastIndexOf('/') + 1);
if (nomefile !== 'descrizioneCasa1.html')
window.frames["descrizione"].location.href = "descrizioneCasa1.html";
}
In questo modo sono riuscito a caricare dentro l'iframe la pagina 
descrizioneCASA1.html, come ho scritto all'inizio del post.
Il problema però è che secondo la funzione "function sali()" l'iframe 
mantiene le coordinate precedenti il cambio di pagina, causando non pochi 
problemi perché il testo caricato successivamente nell'iframe viene 
impostato automaticamente in quel preciso punto. A parte il fatto che la 
funzione "sali()" ha bisogno di un ritocco per aggiustare la condizione
if (i > 1485) {
   clearTimeout(aa);
   }
perché di volta in volta dovrò bloccare lo scorrimento del testo in base 
alla lunghezza effettiva dello stesso, che varierà in base alla pagina 
caricata (descrizioneCASA1.html, descrizioneCASA2.html e così via), a parte 
questo fatto che posso sistemare in un momento successivo il mio
PROBLEMA è il seguente:
devo far sì che la pagina contenuta all'interno dell'iframe, se cambia, deve 
essere reimpostata in alto, all'inzio del testo per intendersi.
Non vi chiedo dunque come si fa ad impostare la pagina in alto, quello penso 
di risolverlo da solo, ma piuttosto come implementare lo script in maniera 
che la funzione "sali()" e "scendi()" sappia riconoscere quando la pagina 
nell'iframe è cambiata. Deve però tenere in considerazione che se la pagina 
è la stessa e l'utente "rolla over" i pulsanti di scorrimento non faccia 
alcunché, ossia non mi riporti la pagina in alto.
IN SINTESI:
In pratica le funzioni "sali()" e "scendi()", a seconda delle immagini che 
vengono selezionate nella pagina principale devono "ricordare" se il 
documento caricato nell'iframe è lo stesso oppure se è cambiato.
Grazie

 var nomefile = window.descrizione.location.href;
E per sapere se è cambiata, controllare se "nomefile" è diversa dalla
"window.descrizione.location.href" attuale.
Però sinceramente queste sono cose che *non* farei nelle funzioni "sali()"
e "scendi()". Del resto, la pagina non può cambiare finché l'utente sta
sopra tali tasti, no? Il cambio pagina è attivato dal rollover di altri
pulsanti. Ergo, finché sto scrollando una pagina, essa rimane *per*forza*
la stessa.
Quindi, tutte queste operazioni, le sposterei nel blocco di codice che si
preoccupa di caricare la pagina nell'iframe.
-- 
~ "Nell'anno 1969 è bastata la potenza di calcolo di due Commodore 64 per
mandare con successo una navicella sulla Luna. Nell'anno 2003 è
necessario un Pentium 4 a 2000 Mhz per far funzionare Windows XP.
Qualcosa deve essere andato storto."

Cosě d'acchito non mi viene, preparo con calma uno scriptino a parte e vedo 
se funziona, se avessi ancora problemi mi rifaccio sentire.
grazie per ora... 

Dunque, non riesco a rendere globale la variabile nomefile.

Dunque, non riesco a rendere globale la variabile nomefile.
var nomefile = window.descrizione.location.href;
il traduttore dice che nomefile è nullo o non è un oggetto 

Come non detto, andava soltanto dichiarata e non inizializzata come 
facevo... infatti cosě non trovava alcun riferimento, giustamente 

Purtroppo non riesco a prescindere dalle funzioni sali() e scendi() per 
aggiornare la pagina dell'iframe in alto, ed il motivo è che il contatore 
della variabile "i" deve essere azzerato ogni volta che l'iframe carica una 
pagina diversa.
Riporto l'esempio:
http://phpgogh.altervista.org/test.html
Se infatti fai scorrere un po' di testo a cambi pagina andando su un'altra 
immagine, inizialmente la pagina viene correttamente caricata in alto 
(all'inzio) però non appena fai per scorrere con il pulsante "SU" o "GIU" 
la variabile "segnaposto" ( ho seguito il tuo suggerimento) imposta 
direttamente il numero di pixel a dove era rimasto precedentemente