Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130

    menu espandibili (domanda teorica)

    ciao

    ho un menu fatto così:
    codice:
    <ul>[*]menu 1
    <ul>[*]sotto m 1.1[*]sotto m 1.2[*]sotto m 1.3[/list]
    [*]menu 2
    <ul>[*]sotto m 2.1[*]sotto m 2.2[*]sotto m 2.3[/list]
    [*]menu 3
    <ul>[*]sotto m 3.1[*]sotto m 3.2[*]sotto m 3.3[/list]
    [/list]
    Volevo sapere come fare per far scendere i sottomenu gradatamente. Chiaramente userò setInterval() che richiamerà una funzione che allungherà gradatamente l'height (CSS) del <ul> annidato in questione. Ma come faccio dire allo script a che altezza fermare il processo di allungamento. I vari sottomenu potrebbero contenere un numero diverso di[*] ed essere cosi di altezza diversa.

    grazie

  2. #2
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    come buona norma per l' accessibilita' i sottomenu' vanno inizialmente tenuti visibili,
    perche' in caso di mancato supporto a javascript il menu' sara' utilizzabile,

    se il sottomenu' e' espanso, visibile e non ha un altezza imposta da stile, puoi rilevare lo spazio occupato con
    riferimentoDOMalSottomenu.offsetHeight
    probabilmente dovrai considerare una leggera discrepanza dovuta a bordi e/o margin della lista e delle singole voci, che non vengono considerati nell' offsetHeight

    ho fatto un menu' del genere, non intrusivo e ad infiniti livelli, ma lo sto ancora testando
    se serve qualche altra dritta discustiamone ancora qui

  3. #3
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    dimmi un po meglio di questo comando DOM!

    Tanto per capirci: per recuperare l'altezza di un <ul> di id="menu1" faccio una cosa tipo:

    var altezza = document.getElementById("menu1").offsetHeight;

    e poi il resto dello script che usa questo valore?

  4. #4
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    si', occhio che cmq non e' una proprieta' standard, ma e' correttamente intesa dai browser moderni
    http://developer.mozilla.org/en/docs...t.offsetHeight

  5. #5
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    altri modi standard non ce ne sono? come fanno i maestri in questa disciplina?

  6. #6
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    guarda che nel caso specifico alternative sinceramente non ne vedo
    almeno in partenza devi rilevare in qualche modo quanto spazio occupa questa lista

    ripeto che offsetHeight e' sufficientemente supportato,
    l' importante e' che degradi dove manca questo supporto

  7. #7
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    degradi?

  8. #8
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    degradare: intr. (aus. essere), lett. andar diminuendo o scemando di altezza
    se e' troppo complesso per il browser, semplifica
    nello specifico, se alla prima rilevazione non conosci l' altezza da li' in poi proverai a cambiare solo il display

  9. #9
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    ok ho capito. senti un pò ... mi serve un'altro consiglio operativo. Quando faccio hover su un link che dovrebbe espandere il relativo sottomenu come gestisco la cosa? perche il sottomenu è display:none. Se gli cambio il display mi appare subito e ho fatto la frittata. Forse devo fare display: block; height: 0px; e poi iniziare il processo di incrememto ell'altezza?

    sei gentile cazzo! di solito mi liquidano con tre righe i ragazzi del forum! ;-)

  10. #10
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    non e' questione di gentilezza, e' tempo/voglia

    secondo quello che avevo trovato, settare a zero l' altezza lo faceva riapparire completamente
    per cui i passi per la preparazione erano:
    rilevo l' altezza con l' offsetHeight
    setto style.height='1px'
    setto display:none;

    poi
    quando si deve espandere
    display:block;
    avvio timer -> ridimensiona(limite) in cui limite e' quanto mi ero rilevato in offsetHeight

    quando si deve comprimere
    avvio timer -> ridimensiona(1)
    in ridimensiona quando arriva a 1 setto display:none; e rimuovo il timer

    ciao

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 © 2026 vBulletin Solutions, Inc. All rights reserved.