• User Attivo

    Ottimizzare posizione e funzione script

    Ciao 🙂

    Sto utilizzando questo script per aprire una finestra al click del mouse

    <script type="text/javascript">

    function getposOffset(overlay, offsettype){
    var totaloffset=(offsettype=="left")? overlay.offsetLeft : overlay.offsetTop;
    var parentEl=overlay.offsetParent;
    while (parentEl!=null){
    totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop;
    parentEl=parentEl.offsetParent;
    }
    return totaloffset;
    }

    function overlay(curobj, subobj){
    if (document.getElementById){
    var subobj=document.getElementById(subobj)
    subobj.style.left=getposOffset(curobj, "left")+"px"
    subobj.style.top=getposOffset(curobj, "top")+"px"
    subobj.style.display="block"
    return false
    }
    else
    return true
    }

    function overlayclose(subobj){
    document.getElementById(subobj).style.display="none"
    }

    </script>Avrei bisogno di apportare però due modifiche.

    La prima riguarda chiusura della finestra a qualsiasi click del mouse in qualsiasi punto della pagina; per adesso invece, posso utilizzare solamente:

    <a href="#" onClick="overlayclose('subcontent'); return false">Close</a>La seconda modifica riguarda la posizione. La nuova finestra si apre coprendo il link, mentre io vorrei farla apparire sotto. Ho provato a fare così

    style="position:absolute top:50%;

    ma quando clicco, l'attributo "absolute" va a farsi benedire e il layout della pagina pure.

    Come posso fare?


  • User Attivo

    per il 1° problema.....se metti l'onclick al body...dovresti risolvere

    per il 2° nello script prova a fare così:
    subobj.style.left=getposOffset(curobj, "left")+"px"
    subobj.style.top=((getposOffset(curobj, "top")*1)+25)+"px"

    fammi sapere!


  • User Attivo

    per il 2° nello script prova a fare così:
    subobj.style.left=getposOffset(curobj, "left")+"px"
    subobj.style.top=((getposOffset(curobj, "top")*1)+25)+"px"

    Grande! 😄 Funziona perfettamente, grazie!!

    Riguaro all'onclick, non c'è un sistema per integrarlo direttamente nello script o nel tag di richiamo? Potrei anche provarci da solo, ma ho sempre paura di combinare pasticci riguardo la compatibilità dei browser.

    Aggiungo una nuova richiesta e poi giuro che mi fermo qui 😊

    Come posso collegare lo script esternamente? Nel senso che, vorrei mettere lo script in un file .js e poi richiamarlo nella pagina. La stringa di richiamo so come funziona, ma non so come modificare il codice dello script...basta togliere <script type="text/javascript"> e </script> o c'è altro da fare?

    Ad ogni modo, grazie 1000 Digital 🙂


  • User Attivo

    punto 1:
    document.onclick = function(){ alert("Ecco il click!!!"); }

    punto 2:
    Si, togli i tag dello sript e lo incolli in un documento *.js

    punto 3:
    Che mi ringrazzi a fare....sono qui apposta!
    hehehe, comunque....di niente

    punto 4:

    Potrei anche provarci da solo, ma ho sempre paura di combinare pasticci riguardo la compatibilità dei browser.

    Per imparare bisogna sbagliare...cerca di trovare tutti i modi "per non far funzionare" uno script....e poi trova il solo modo in cui funzioni!!!!;)

    Se hai bisogno...siamo tutti qui!!!!


  • User Attivo

    Per imparare bisogna sbagliare...cerca di trovare tutti i modi "per non far funzionare" uno script....e poi trova il solo modo in cui funzioni!!!!;)Il modo più saggio e simpatico per dire: perdici la vita fin quando non avrai imparato 🙂

    Anche se il tuo compito è aiutare i somari come me, ti ringrazio ugualmente perchè non sempre si ha la voglia o l'interesse necessario per farlo (ho fatto il moderatore anch'io per qualche tempo...;) )

    Come avrai capito sono bianchissimo in fatto di javascript, quindi sono costretto a chiederti, dove va messa questa stringa?

    document.onclick = function(){ alert("Ecco il click!!!"); }Devo anche rompere il giuramento che fatto prima, perchè ho ricordato un'altra richiesta che volevo proporre...:D

    Praticamente io ho la mia pagina, nella quale inserisco lo script vero e proprio tra gli head (o il richiamo), il tag per richiamarlo tra i body e un div che racchiude il contenuto da aprire al click (subcontent).

    C'è la possibilità di spostare quest'ultimo in un secondo file e richiamarlo? Non so se sono chiaro..In pratica

    index.html
    finestra da richiamare.html
    script.js

    Ho già pasticciato un pò, ma non credo sia cosa da niente...

    Penso che ormai ti sei fatto un'idea di cosa cerco, quindi se hai qualche altro script bello e pronto da scaricare, sono disposto a buttare il mio...

    Se non si può fare, fa niente 😉


  • User Attivo

    Il modo più saggio e simpatico per dire: perdici la vita fin quando non avrai imparato image

    Nono, Tomas Edison, prima di riuscire a creare la lampadina, ha sbagliato un sacco di volte, ma lui diceva ad ogni fallimanto:
    "ho trovato un'altro modo per non creare una lampadina"

    la stringha, va messa in pagina, o nel js, al posto del'allert, metti la funzione per far scomparire il div.

    non ho capito bene la 2° parte!


  • User Attivo

    @Digital Daigor said:

    Nono, Tomas Edison, prima di riuscire a creare la lampadina, ha sbagliato un sacco di volte, ma lui diceva ad ogni fallimanto:
    "ho trovato un'altro modo per non creare una lampadina"

    Vero 🙂
    Nel mio caso però, di modi per rovinare uno script ne ho già trovati tanti...:D

    Ti faccio un esempio live di quello che voglio ottenere, così mi dici se il mio script va bene oppure devo cercare qualcosa di diverso.
    Su youtube, nel menù in alto, c'è il pulsante "sito" con la bandierina; se clicchi, apre una finestra. Ecco, questo è semplicemente quello che voglio riuscire a fare.
    Inoltre, il codice della finestra che si apre con tutte le nazioni, vorrei poterlo mettere in un file diverso e richiamarlo con lo script all'interno della pagina principlale. Si può fare? :mmm:


  • User Attivo

    Aggiorno: ho risolto il problema della chiusura con il click ovunque aggiungendo un altro po di codice...

    Ora però torno ad avere problemi con la posizione. Se il link si trova all'estremità destra della pagina, la finestra aprendosi, esce fuori dai margini spaginando. Ho fatto uno scarabocchio con paint per spiegarmi meglio.

    Il nuovo script è questo:

    function getposOffset(overlay, offsettype){
    var totaloffset=(offsettype=="left")? overlay.offsetLeft : overlay.offsetTop;
    var parentEl=overlay.offsetParent;
    while (parentEl!=null){
    totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop;
    parentEl=parentEl.offsetParent;
    }
    return totaloffset;
    }

    function overlay(curobj, subobjstr, opt_position){
    if (document.getElementById){
    closealloverlay();
    var subobj=document.getElementById(subobjstr)
    document.onclick=function(e){
    clicktohide(curobj, subobjstr, e)
    }
    subobj.style.display=(subobj.style.display!="block")? "block" : "none"
    var xpos=getposOffset(curobj, "left")+((typeof opt_position!="undefined" && opt_position.indexOf("right")!=-1)? -(subobj.offsetWidth-curobj.offsetWidth) : 0)
    var ypos=getposOffset(curobj, "top")+((typeof opt_position!="undefined" && opt_position.indexOf("bottom")!=-1)? curobj.offsetHeight : 0)
    subobj.style.left=getposOffset(curobj, "left")+"px"
    subobj.style.top=((getposOffset(curobj, "top")*1)+15)+"px"
    return false
    }
    else
    return true
    }

    function closealloverlay()
    {
    var oDivs = document.getElementsByTagName("DIV");
    var i;

    for (i = 0 ; i < oDivs.length ; i++)
    {
    if (oDivs*.className == "OverlayDiv")
    {
    overlayclose(oDivs*.id);
    }
    }
    }

    function overlayclose(subobj){
    document.getElementById(subobj).style.display="none"
    }

    function clicktohide(linkobj, subobj, e){
    var currentnode=(window.event)? event.srcElement : e.target
    var hidesubobj=true
    while (currentnode.tagName!="BODY" && currentnode.tagName!="HTML"){
    if (currentnode.id==subobj || currentnode==linkobj){
    hidesubobj=false
    break
    }
    currentnode=currentnode.parentNode
    }
    if (hidesubobj)
    overlayclose(subobj)
    }


  • User Attivo

    fai un controllo prima di settare la posizione....

    if((posx+divwidth)>larghezza_schermo)
    {
    posx = larghezza_schermo-(posx+divwidth);
    }

    questo è un esempio....devi riadattarlo!