Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di kafkahc
    Registrato dal
    Mar 2002
    Messaggi
    113

    Un menu espandibile con Javascript e CSS

    Salve a tutti,
    ho seguito l'articolo nella parte javascript di html.it intitolato "Un menu espandibile con Javascript e CSS" disponibile qui

    e sono riuscito a farel'esempio del menu con solo uan voce per volta aperta...

    Il mio "problema" nasce dal fatto che, paerto con internet explorer questo menu in fase di caricamento della pagian mi fa un effetto "apri e chiudi" che, supper velocissimo sta parecchio male...
    Qualcuno saprebbe dirmi se sbaglio qualcosa io oppure é "normale" che succeda?

    io ho seguito l'esempio pari pari... Ho solo cambiato le voci e i colori/font del css...
    Purtroppo ho la necessità di fare un menù ad apertura, e ho già provato diverse soluzioni, ma ottengo sempre questo effetto "apri chiudi"...

  2. #2
    Utente di HTML.it L'avatar di kafkahc
    Registrato dal
    Mar 2002
    Messaggi
    113
    causa errori di scrittura riposto... scusate!

    Salve a tutti,
    ho seguito l'articolo nella parte javascript di html.it intitolato "Un menu espandibile con Javascript e CSS" disponibile

    e sono riuscito a fare l'esempio del menu con solo una voce per volta aperta...

    Il mio "problema" nasce dal fatto che, paerto con internet explorer questo menu in fase di caricamento della pagina mi fa un effetto "apri e chiudi" che, seppur velocissimo sta parecchio male...
    Qualcuno saprebbe dirmi se sbaglio qualcosa io oppure é "normale" che succeda?

    io ho seguito l'esempio pari pari... Ho solo cambiato le voci e i colori/font del css...
    Purtroppo ho la necessità di fare un menù ad apertura, e ho già provato diverse soluzioni, ma ottengo sempre questo effetto "apri chiudi"...qui

  3. #3
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    script / discussioni utili
    onDOMLoad, onload al caricamento del solo xhtml

  4. #4
    Utente di HTML.it L'avatar di kafkahc
    Registrato dal
    Mar 2002
    Messaggi
    113
    Ciao Xinod,
    grazie per la segnalazione.

    Purtroppo però non riesco a far partire la mia funzione

    codice:
    var prev= null;
    
    window.onload=function(){
    if(document.getElementsByTagName && document.getElementById){
        document.getElementById("menu").className="jsenable";
        BuildList();
        }
    }
    
    function BuildList(){
    var hs=document.getElementById("menu").getElementsByTagName("h3");
    for(var i=0;i<hs.length;i++){
        hs[i].onclick=function(){
            if(this.parentNode.className!="show"){
                this.parentNode.className="show";
                if(prev && prev!=this.parentNode) prev.className="hide";
                prev=this.parentNode;
                }
            else this.parentNode.className="hide";
            }
        }
    }
    Senza che parta in "ritardo" rispetto al caricamento della pagina (effetto apri chiudi). lo script javascritp non é direttamente sulla pgina ma richiamato tramite
    codice:
    <script type="text/Javascript" src="/js/expand.js"></script>
    Ho provato ad aggiungere il codice suggerito da andrea, ma sicuramente sbaglio qualcosa visto che le mie conoscenza di javascript si limitano a poche funzioni prese in rete in maniera occasionale...

    io speravo che funzionasse semplicemente così...



    codice:
    function onContent(callback){
    	__onload__={
    		E:function(){window.onload=null;callback()},
    		IES:function(e){if(e.readyState==="complete")this.E()},
    		FO:document.addEventListener?"document.addEventListener('DOMContentLoaded',__onload__.E,false)":"void(0)"
    	};
    	onload=callback;
    	if(/WebKit|Konqueror/i.test(navigator.userAgent))
    		(function(){/loaded|complete/.test(document.readyState)?__onload__.E():setTimeout(arguments.callee,1)})();
    	else if(!window.opera||parseInt(window.opera.version())>=9)
    		document.write('<scr'+'ipt src="java-script:'+__onload__.FO+'" defer="defer" onreadystatechange="__onload__.IES(this)"></scr'+'ipt>');
    };
    
    
    var prev= null;
    
    window.onload=function(){
    if(document.getElementsByTagName && document.getElementById){
        document.getElementById("menu").className="jsenable";
        BuildList();
        }
    }
    
    function BuildList(){
    var hs=document.getElementById("menu").getElementsByTagName("h3");
    for(var i=0;i<hs.length;i++){
        hs[i].onclick=function(){
            if(this.parentNode.className!="show"){
                this.parentNode.className="show";
                if(prev && prev!=this.parentNode) prev.className="hide";
                prev=this.parentNode;
                }
            else this.parentNode.className="hide";
            }
        }
    }

  5. #5
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    codice:
    onContent(function(){
    if(document.getElementsByTagName && document.getElementById){
        document.getElementById("menu").className="jsenable";
        BuildList();
        }
    });
    e rimuovi
    codice:
     
    window.onload=function(){
    if(document.getElementsByTagName && document.getElementById){
        document.getElementById("menu").className="jsenable";
        BuildList();
        }
    }
    ciao

  6. #6
    Utente di HTML.it L'avatar di kafkahc
    Registrato dal
    Mar 2002
    Messaggi
    113
    mmm
    grazie ma purtroppo non é cambiato nulla mettendo

    codice:
    // JavaScript Document
    function onContent(callback){
    	__onload__={
    		E:function(){window.onload=null;callback()},
    		IES:function(e){if(e.readyState==="complete")this.E()},
    		FO:document.addEventListener?"document.addEventListener('DOMContentLoaded',__onload__.E,false)":"void(0)"
    	};
    	onload=callback;
    	if(/WebKit|Konqueror/i.test(navigator.userAgent))
    		(function(){/loaded|complete/.test(document.readyState)?__onload__.E():setTimeout(arguments.callee,1)})();
    	else if(!window.opera||parseInt(window.opera.version())>=9)
    		document.write('<scr'+'ipt src="java-script:'+__onload__.FO+'" defer="defer" onreadystatechange="__onload__.IES(this)"></scr'+'ipt>');
    };
    
    
    var prev= null;
    
    onContent(function(){
    if(document.getElementsByTagName && document.getElementById){
        document.getElementById("menu").className="jsenable";
        BuildList();
        }
    });
    
    
    
    function BuildList(){
    var hs=document.getElementById("menu").getElementsByTagName("h3");
    for(var i=0;i<hs.length;i++){
        hs[i].onclick=function(){
            if(this.parentNode.className!="show"){
                this.parentNode.className="show";
                if(prev && prev!=this.parentNode) prev.className="hide";
                prev=this.parentNode;
                }
            else this.parentNode.className="hide";
            }
        }
    }
    il menù si apre e velocemente si chiude a ogni apertura della pagina...

  7. #7
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    ok, questo e' quanto
    quello che ti ho suggerito serve ad anticipare al massimo l' attivazione dello script,
    ma lo scatto ci sara' sempre se vuoi garantire l' usabilita' del menu' ai dispositivi che supportano i css ma non javascript

    se non ti interessa nascondi inizialmente i sottomenu via css,
    ma cosi' a tutti i dispositivi che non supportano javascript probabilmente complichi/impedisci la navigazione

  8. #8
    Utente di HTML.it L'avatar di kafkahc
    Registrato dal
    Mar 2002
    Messaggi
    113
    Grazie della spiegazione Xinod,
    credo che la soluzione ideale, se possibile, sarebbe di non utilizzare menu a scomparsa con javascript.
    Comunque meglio che si apra rapidamente piuttosto che sia "invisibile" ai dispositivi con javascript disattivato (credo che anche per i motori di ricerca potrebbe essere una complicazione non da poco).

    Grazie ancora

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.