Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    1,271

    Menu a scomparsa.. ok con IE, ko con Mozilla

    Sto provando un menu a scomparsa che ho scritto oggi.. mi dareste un'occhiata qua? Con IE e Opera funziona, con Mozilla & co non viene effettuato lo scrolling.. per fare cio` modifico il parametro top di ogni elemento del menu. Perche` a Mozilla non piace?

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    1,271
    Uppa..

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    1,271
    codice:
    var click=0, offset=40, x=0; y=0;
    function scrollmenu(menuID) {
       j=eval('menuID.substring(4,6)');	// Rileva l'id del menu clickato..
       y=j;	// ..salvane una copia..
       j++;	// ..e aumenta l'id di una posizione (occorre far scrollare solo i menu sotto a quello clickato)
       resetmenu();	// Prima di iniziare lo scrolling, ripristina la situazione originale del menu
       if ((click == 0) || (z != y)) {	// Scrolla solo se non e` ancora stato effettuato nessuno scrolling o se il menu clickato e` diverso da quello clickato prima
          for (i = j; i <= 14; i++) {	// Abbiamo 14-y elementi da scrollare
             x=eval("document.getElementById(menu[i]).style.top");	// Rileva la posizione verticale del menu corrente
             if (x.length == 4) {		// La posizione e` espressa su 4 caratteri?
                num = x.substring(0,2);	// Se si`, elimina i due caratteri px dal fondo e prendi i primi due
             }						
             else {
                num = x.substring(0,3);	// Se no, elimina i due caratteri px dal fondo e prendi i primi tre
             }
             var valnum = eval(num);	// Trasforma la stringa di posizione in un numero
             tot = valnum + offset * menu[j+20];	// Calcola quanto spazio occorre per i sottomenu
           document.getElementById(menu[i]).style.top = tot;	// Sposta l'elemento corrente
          }
          click=1;	// Lo scrolling e` stato effettuato
          var contmenu="cmenu" + y;	// Determina quale sottomenu occorre far apparire..
          document.getElementById(contmenu).style.visibility = "visible";	// ..e rendilo visibile
          z=y;	// Salva l'id del menu clickato
          }
       else {
          click=0;
       }
    }
    Il problema sembra essere nella riga in grassetto.. Mozilla/NN semplicemente la ignorano.. problemi col getElementById? E se e` cosi` che cappero devo usare?

  4. #4
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    pensavo di averti risposto prima del tuo ultimo messaggio,
    te lo riporto

    scusa Dabotz, non converrebbe lavorare sulla proprietà display dei sottomenù?
    un livello con stile display='none' non occupa spazio
    e quando viene cambiato (a 'block' x mostrare il contenuto) le voci sottostanti e relativi sotto-menù si riposizionano opportunamente,
    se poi è un esperimento x capirne di + è un altro discorso:

    mi sembra ci siano parecchi eval non strettamente necessari:
    x es. tutto questo
    codice:
    			x=eval("document.getElementById(menu[i]).style.top");	// Rileva la posizione verticale del menu corrente
    			if (x.length == 4) {					// La posizione e` espressa su 4 caratteri?
    				num = x.substring(0,2);			// Se si`, elimina i due caratteri px dal fondo e prendi i primi due
    			}						
    			else {
    				num = x.substring(0,3);			// Se no, elimina i due caratteri px dal fondo e prendi i primi tre
    			}
    			var valnum = eval(num);				// Trasforma la stringa di posizione in un numero
    è x=parseInt(document.getElementById(menu[i]).style.top);

    ma, soprattutto, il menù non funziona con MOZ/NN7 perchè il top che cerchi di leggere/modificare non è definito in linea
    x molti browser moderni queste è una condizione essenziale affinchè il valore sia manipolabile via script
    alcuni browser vogliono anche il 'px' dopo il settaggio, quindi
    document.getElementById(menu[i]).style.top = tot+'px';

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    1,271
    Uh.. ma che differenza c'e` tra display none e visibility hidden?

    La funzione parselnt non la conoscevo, molto utile.

    Quindi per far funzionare il tutto dovrei togliere dal css esterno le definizioni dei menu e integrarle in linea? Mo' provo. Utile anche la cosa del px, lo ignoravo.

    Grazie per la risposta!

  6. #6
    Reale_Augello
    Guest

    ...

    Originariamente inviato da dAbOTZ
    Uh.. ma che differenza c'e` tra display none e visibility hidden?
    Un livello con display none non occupa spazio, mentre uno con visibility su hidden, pur essendo invisibile, occupa comunque spazio.

  7. #7
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    tra l' altro ho fatto un po' di confusione,
    lo stile necessariamente in linea non è un requisito primario
    (se non sbaglio solo alcune versioni di opera hanno il problema se non è in linea)

    nel caso del tuo menù basta aggiungere +'px'

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    1,271
    Mitico, funziona! E` strano che il validator abbia ignorato l'assenza del px.. vatti a fidare (ti meriti i credit della soluzione al problema sul sito). Grazie anche ad Augello!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.