Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    29

    Impostazione posizione d'arresto di un floating menu

    Il seguente script serve per ottenere lo scrolling di un menu in senso verticale. Il problema che io vorrei risolvere (e quindi come modificare lo script) è il seguente: se non vado errato lo script consente di impostare la distanza (in pixel) di partenza del menu dal margine sx (27) e da quello superiore (320) della schermata ma non consente di impostare anche una posizione d'arresto (a quanti pixel di distanza) dal margine inferiore della schermata.

    Ora, poichè per mia necessità il menu scrollante dovrebbe muoversi all'interno di uno spazio (in verticale) definito, sulla base di come è impostato lo script, quando scrollo completamente la pagina verso il basso, la parte inferiore del menu continua la sua corsa fino in fondo alla stessa (cosa che io vorrei non accadesse).

    Quindi la mia domanda è la seguente: come posso impostare la distanza in pixel dal margine inferiore della schermata oltre il quale il menu non può scrollare? Spero di essere stato chiaro.

    In definitiva: anche se la pagina viene scrollata completamente, il menu non deve proseguire il suo movimento verso il basso oltre un certo limite da me imposto.

    Segue lo script che molti di voi sicuramente conosceranno:

    -------------------------------

    <script>
    if (!document.layers)
    document.write('<div id="divStayTopLeft" style="position:absolute">')
    </script>
    <layer id="divStayTopLeft">

    MENU

    </layer>

    <script type="text/javascript">

    file://Enter "frombottom" or "fromtop"
    var verticalpos="frombottom"

    if (!document.layers)
    document.write('</div>')

    function JSFX_FloatTopDiv()
    {
    var startX = 27,
    startY = 320;
    var ns = (navigator.appName.indexOf("Netscape") != -1);
    var d = document;
    function ml(id)
    {
    var el=d.getElementById?d.getElementById(id):d.all?d.a ll[id]:d.layers[id];
    if(d.layers)el.style=el;
    el.sP=function(x,y){this.style.left=x;this.style.t op=y;};
    el.x = startX;
    if (verticalpos=="fromtop")
    el.y = startY;
    else{
    el.y = ns ? pageYOffset + innerHeight : document.body.scrollTop + document.body.clientHeight;
    el.y -= startY;
    }
    return el;
    }
    window.stayTopLeft=function()
    {
    if (verticalpos=="fromtop"){
    var pY = ns ? pageYOffset : document.body.scrollTop;
    ftlObj.y += (pY + startY - ftlObj.y)/8;
    }
    else{
    var pY = ns ? pageYOffset + innerHeight : document.body.scrollTop + document.body.clientHeight;
    ftlObj.y += (pY - startY - ftlObj.y)/8;
    }
    ftlObj.sP(ftlObj.x, ftlObj.y);
    setTimeout("stayTopLeft()", 10);
    }
    ftlObj = ml("divStayTopLeft");
    stayTopLeft();
    }
    JSFX_FloatTopDiv();
    </script>
    Linus60

  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    C'e' qualche imperfezione nel codice che hai postato... presumibilmente un copia/incolla non perfetto

    Sul codice prelevato da http://www.dynamicdrive.com/dynamici...icmenu_dev.htm ho apportato queste modifiche:

    codice:
    ... (omissis) ...
    <script type="text/javascript">
    
    /*
    Floating Menu script- Roy Whittle (http://www.javascript-fx.com/)
    Script featured on/available at http://www.dynamicdrive.com/
    This notice must stay intact for use
    */
    
    var verticalpos="frombottom"
    
    if (!document.layers)
    document.write('</div>')
    
    function JSFX_FloatTopDiv()
    {
    var startX = 3,
    startY = 150;
    var endY = 400;
    var ns = (navigator.appName.indexOf("Netscape") != -1);
    
    ... (omissis) ...
    
    if (endY!=0) {
    	if (ftlObj.y > endY) ftlObj.y = endY
    }
    ftlObj.sP(ftlObj.x, ftlObj.y);
    setTimeout("stayTopLeft()", 10);
    }
    ftlObj = ml("divStayTopLeft");
    stayTopLeft();
    }
    JSFX_FloatTopDiv();
    </script>
    Spero sia quello che cercavi

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    29
    Ho fatto il copia ed incolla nel mio script delle modifiche che hai ad esso apportato . Lo scroll, però, funziona esattamente come prima... ma potrei anche aver male eseguito il cut & paste.

    Pertanto ti sarei grato se potessi postarmi lo script x intero senza omissis.

    Grazie per l'aiuto
    Linus60

  4. #4
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    codice:
    <html>
    <body>
    <script>
    if (!document.layers)
    document.write('<div id="divStayTopLeft" style="position:absolute;">')
    </script>
    
    <layer id="divStayTopLeft">
    
    
    <table border="1" width="130" cellspacing="0" cellpadding="0">
    <tr>
    <td width="100%" bgcolor="#FFFFCC">
    <p align="center"><font size="4">Menu</font></td>
    </tr>
    <tr>
    <td width="100%" bgcolor="#FFFFFF">
    <p align="left"> Dynamic Drive
    
    What's New
    
    What's Hot
    
    FAQs
    
    More Zone</td>
    </tr>
    </table>
    
    
    </layer>
    
    
    <script type="text/javascript">
    
    /*
    Floating Menu script- Roy Whittle (http://www.javascript-fx.com/)
    Script featured on/available at http://www.dynamicdrive.com/
    This notice must stay intact for use
    */
    
    var verticalpos="frombottom"
    
    if (!document.layers)
    document.write('</div>')
    
    function JSFX_FloatTopDiv()
    {
    var startX = 3,
    startY = 150;
    var endY = 600;
    var ns = (navigator.appName.indexOf("Netscape") != -1);
    var d = document;
    function ml(id)
    {
    var el=d.getElementById?d.getElementById(id):d.all?d.all[id]:d.layers[id];
    if(d.layers)el.style=el;
    el.sP=function(x,y){this.style.left=x;this.style.top=y;};
    el.x = startX;
    if (verticalpos=="fromtop")
    el.y = startY;
    else{
    el.y = ns ? pageYOffset + innerHeight : document.body.scrollTop + document.body.clientHeight;
    el.y -= startY;
    }
    return el;
    }
    window.stayTopLeft=function()
    {
    if (verticalpos=="fromtop"){
    var pY = ns ? pageYOffset : document.body.scrollTop;
    ftlObj.y += (pY + startY - ftlObj.y)/8;
    }
    else{
    var pY = ns ? pageYOffset + innerHeight : document.body.scrollTop + document.body.clientHeight;
    ftlObj.y += (pY - startY - ftlObj.y)/8;
    }
    // inserisco il controllo in basso
    if (endY!=0) {
    	if (ftlObj.y > endY) ftlObj.y = endY
    }
    ftlObj.sP(ftlObj.x, ftlObj.y);
    setTimeout("stayTopLeft()", 10);
    }
    ftlObj = ml("divStayTopLeft");
    stayTopLeft();
    }
    JSFX_FloatTopDiv();
    </script>
    
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    </body>
    </html>
    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    29
    Partendo dal presupposto che io uso Microsoft Internete Explorer (che è poi quello che più mi interessa) per testare lo script, devo dire che purtroppo non ricevo a video l'effetto sperato. Prendendo le mosse dalle sottoelencate variabili:

    var startX = 27,
    startY = 320;
    var endY = 500;

    ho provato ha modificare il valore di var endY, aumentandolo (500) oppure diminuendolo (330) ma il risultato è sempre lo stesso... il menu scrolla in sintonia con la pagina ed il suo margine inferiore giunge fino a quello inferiore della schermata.
    Linus60

  6. #6
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Per evitare di "tirare ad indovinare" sarebbe opportuno che tu postassi un link ad una pagina di prova o, in mancanza, la pagina completa.

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    29
    Ho trovato l'inghippo:

    Per funzionare come mi necessita lo script, il valore della variabile

    var endY

    deve essere minore e non maggiore di

    startY

    Quindi se, ad esempio, scrivo nel modo seguente:

    var startX = 27,
    startY = 320;
    var endY = 250;

    lo script funziona come io mi aspetto.

    Prima, invece, facevo l'esatto contrario!

    Ora farò qualche altra prova. Nel caso ci fossero problemi mi rifarò vivo.

    Intanto.... grazie per il supporto!!!

    Linus60

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.