Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    58

    linguetta con caricamento funzioni

    Salve a tutti, è un po' complesso spiegare quello che ho in mente, cercherò di fare degli esempi per essere più chiaro possibile.
    Vorrei capire come è possibile realizzare, ammesso che si faccia con i css e non con altro tipo javascript, una linguetta per un menù verticale (come quella che c'è in alto in questo stesso forum "sponsor, video edit, oneblog, news ecc ecc") che nel momento in cui si clicca, faccia comparire un div o comunque una finestrella che possa contenere del codice php o almeno html.
    Per fare un esempio concreto qualcosa come i pulsantini che stanno in alto a sinistra in facebook, quelli che indicano se ci sono nuove richieste di amicizia, nuovi messaggi, o nuove notifiche. cliccando su quelle caselline si apre una finestrella collegata che contiene del codice.
    Io non ho bisogno di scrivere del codice complesso come quello di facebook, mi devo limitare a inserire una elenco cliccabile possibilimente formattato in javascript con "cufòn".

    Spero di essere stato abbastanza chiaro nella speigazione.

    Grazie, ciao.

  2. #2
    Dunque, dunque...

    Le schede le puoi creare come una serie di div flottanti:
    Codice PHP:
    <div id="menu">
      <
    div id="tab1" style="float:left;" onclick="selectTab(1);" onmouseover="over(this);" onmouseout="out(this);">item1</div>
      <
    div id="tab2" style="float:left;" onclick="selectTab(2);">item2</div>
      <
    div id="tab3" style="float:left;" onclick="selectTab(3);">item3</div>
    </
    div
    Puoi aggiungere ai div gli eventi onmouseover e onmouseout per gestire il fatto che l'utente posi il mouse sulle schede (nell'esempio l'ho applicato solo alla prima).
    Codice PHP:
    function over(tag//mouse sull'elemento
    {
      
    tag.style... //imposta grafica particolare quando il mouse è sull'elemento
    }
    function 
    out(tag//mouse esce dall'elemento
    {
      
    tag.style... //resetta grafica di defaul per l'elemento

    Tramite l'attributo style del div puoi cambiargli la grafica a piacimento. Puoi anche lavorare con img al posto di div e cambiare l'attributo src. (Questi effetti possono essere fatti anche con i css anzichè con funzioni JS ma non sono pienamente compatibili).

    Quando l'utente clicca sulla scheda si attiva la funzione selectTab:
    Codice PHP:
    function selectTab(tab)
    {
      switch(
    tab)
      {
         case 
    1showTab1(); return;
         case 
    1showTab2(); return;
         case 
    1showTab3(); return;
      }

    La funzione tramite switch chiamerà la funzione specifica per gestire la data scheda.

    A questo punto ha bisogno che si evochi una finestrella (dialog) con all'interno del codice!
    Comincia con l'inserire questo div nella tua pagina index principale:
    Codice PHP:
    <div id="dialog" style="display:none; position:fixed;"></div
    Questo tramite display none sarà invisibile fino a quando lo chiameremo.
    Torniamo a showTab1 e leghiamo le cose:
    Codice PHP:
    function showTab1()
    {
      var 
    dialog document.getElementById("dialog"); //collegamento al div dialog
      
    dialog.style.left "100px"//posizione x del dialog evocato
      
    dialog.style.top "50px"//posizione y del dialog evocato
      
    dialog.style.display "block"//mostra dialog
      
      //INSERIRE HTML NEL DIALOG


    Al posto dell'ultimo commento (INSERIRE HTML NEL DIALOG) puoi usare due tipi di codici in base all'esigenza. Se necessiti di semplice html ti basterà fare questo:
    Codice PHP:
      dialog.innerHTML "[i]sono la prima scheda[/i]"
    Se invece vuoi inserire del php (o meglio: html generato tramite php ) devi necessariamente fare una chiamata AJAX e l'intera funzione prenderà queste sembianze:
    Codice PHP:
    function showTab1()
    {
      var 
    dialog document.getElementById("dialog"); //collegamento al div dialog
      
    dialog.style.left "100px"//posizione x del dialog evocato
      
    dialog.style.top "50px"//posizione y del dialog evocato
      
    dialog.style.display "block"//mostra dialog
      
      
    var xmlhttp window.XMLHttpRequest? new XMLHttpRequest() : new   ActiveXObject("Microsoft.XMLHTTP"); //ajax
      
    xmlhttp.open("POST","tagHandler.php",true);
      
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
      
    xmlhttp.setRequestHeader("Content-length",1);
      
    xmlhttp.setRequestHeader("Connection","close");

      
    xmlhttp.onreadystatechange=function()
      {
        if(
    xmlhttp.readyState==&& xmlhttp.status==200)
        {
               
    dialog.innerHTML xmlhttp.responseText;
        }
      }
      
    xmlhttp.send("tab=1");

    Lavorando con il metodo post puoi anche bypassare la precedente funzione con lo switch e mandare direttamente la richiesta di tab attraverso il metodo POST.

    Ricordati poi di impostare una via di uscita per la dialog (X in alto a destra o chiudendola se l'utente seleziona qualcosa al suo interno:
    Codice PHP:
    function closeDialog()
    {
      
    document.getElementById("dialog").style.display "none";

    Ok, penso sia tutto. Ho battuto il codice a mano quindi ci sarà sicuramente qualche errorino, sepro tu abbia capito la logica di lavoro

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    58
    FANTASTICO!!!!

    Ti ringrazio... non mi aspettavo una spiegazione così dettagliata, grazie mille.

    Se posso, l'unica cosa che non ho capito bene è l'utilità dell' switch. Cioè a ogni pulsante corrisponde una e una sola finestra di dialogo, perchè utilizzare lo switch? Forse mi sono perso in qualche passaggio?

    Grazie ancora, ora vedo se le cose sono chiare anche nella pratica oltre che nella teoria.

    Ciao.

  4. #4
    Vai tranquillo, non avevo nulla da fare

    Scherzi a parte lo switch diventa utile nel momento in cui per uniformità vuoi legare tutte le schede sotto un'unica funzione di selezione sotto la forma SELEZIONA_SCHEDA(SCHEDA). Puoi sempre affibiare ad ogni singola scheda una propria funzione all'evento onclick, non cambia assolutamente nulla.

    Prima di ringraziare controlla che vada tutto comunque

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    58
    ahahahahaha, bè, io intanto ti ringrazio per la buona volontà e per il tempo che hai dedicato al mio problema.

    Per quanto riguarda il funzionamento in effetti ho qualche problemino.
    Correggimi se sbaglio, io ho inserito il codice che mi hai scritto tutto dentro lo stesso file. Il codice javascript l'ho messo dentro i tag

    codice:
    <script type="text/javascript">
    
    </script>
    e sembra che funzioni tutto senza problemi. Le uniche cose che non ho molto chiare sono dove mettere la funzione per chiudere la finestrella di dialogo. Cioè la funzione credo che vada messa con tutte le altre, non capisco come fare a collegare la funzione alla finestra di dialogo in modo che questa si chiuda o con una X in alto a destra, oppure cliccando un link al suo interno (quello penso che venga automaticamente nel momento che viene caricata la pagina collegata al link) oppure cliccando al di fuori del dialogo.

    Poi presumo di dare lo stile e la posizione alla finestra tramite l'attributo style. Io vorrei farla stare esattamente sotto il pulsante che la genera, un po' come se fosse un menù a tendina personalizzato.


    Grazie ancora.
    Ciao

  6. #6
    Beh, devi inserire il close dialog in base alle tue esigenze.

    Se vuoi obbligare l'utente ad effettuare una scelta prima di chiudere la scheda lo inserirai nella funzione che gestirà le scelte.

    Altrimenti un altro buon metodo è questo:
    Codice PHP:
    <div id="dialogBG" style="position:fixed; display: none; left: 0; top: 0; width: 1280px; height: 800px;" onclick="closeDialog();">

    </
    div
    Le dimensioni ovviamente dipendono dalle dimensioni del tuo sito, questo div lo piazzi sopra il div dialog.

    Nella funzione per chiamare il dialog inserisci in alto l'istruzione:
    Codice PHP:
    document.getElementById("dialogBG").style.display "block"
    Così da avere un intero div senza sfondo (quindi trasparente) che copre tutta la pagina e sopra il tuo div del menu. Se l'utente clicca fuori dal div del menù il div di sfondo catturerà quel click che chiamerà la close dialog così modificata:
    Codice PHP:
    function closeDialog()
    {
      
    document.getElementById("dialog").style.display document.getElementById("dialogBG").style.display "none";


  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    58
    Ciao, scusa se non ho risposto prima, ma sono stato qualche giorno fuori città.

    Ti ringrazio per la soluzione proposta, è quasi perfetta per quello che mi serve. L'unica modifica che avrei bisogno di fare è mettere il dialog con l'eventuale scelta multipla sopra il div trasparente che serve per la chiusura, perchè se lo metto sotto la finestra si chiude anche se provo a cliccare un link all'interno del div.

    La prima cosa che mi viene in mente di fare è usare il comando z-index con i css. Però sembra che non funzioni. Ho provato a dare due livelli differenti ai due div ma sembra che quello trasparente stia sempre sopra l'altro.

    Grazie ancora di tutto.
    CIao

  8. #8
    Basta che inscerisi il div con il BG prima del div col il DIALOG. Immagina che sia un disegno a strati, il codice viene eseguito riga per riga... quindi se ad un riga "disegni" un div e in quella dopo ne disegni uno nella stessa posizione questo risulterà sovrapposto perchè disegnato sopra il precedente appunto .

    Nel mio post ti ho scritto "inserisci in alto", colpa mia che mi sono spiegato male . Facendo così non hai bisogno di usare z-index o altre proprietà varie

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    58
    Ciao, ti ringrazio per il suggerimento, ma purtroppo non riesco a farlo funzionare, non capisco proprio da cosa possa dipendere.
    Il tuo ragionamento sugli strati è logico, però nella pratica se clicco dentro il dialog mi si chiude. FOrse sto sbagliando qualcosa di cui non mi rendo conto.

    Tutto il codice è dentro la stessa pagina, te lo copio, così se hai voglia puoi correggere gli eventuale errori.


    Codice PHP:

    <script type="text/javascript">  
    function 
    selectTab(tab)
    {
      switch(
    tab)
      {
         case 
    1showTab1(); return;
         case 
    2showTab2(); return;
         case 
    3showTab3(); return;
      }
    }
    </script>


    <script type="text/javascript">
    function showTab1()
    {
      document.getElementById("dialogBG").style.display = "block";

      var dialog = document.getElementById("dialog"); //collegamento al div dialog
      dialog.style.display = "block"; //mostra dialog
      
      dialog.innerHTML = "<a href=\"#\">[i]sono la prima scheda[/i]</a>";  
    }
    </script>

    <script type="text/javascript">  
    function closeDialog()
    {
      document.getElementById("dialog").style.display = document.getElementById("dialogBG").style.display = "none";
    }
    </script>

    <div id="menu">
      <div id="tab1" style="float:left;" onclick="selectTab(1);" onmouseover="over(this);" onmouseout="out(this);">item1</div>
      <div id="tab2" style="float:left;" onclick="selectTab(2);">item2</div>
      <div id="tab3" style="float:left;" onclick="selectTab(3);">item3</div>
    </div>


    <div id="dialogBG" style="position:fixed; display: none; left: 0; top: 0; width: 1280px; height: 800px;" onclick="closeDialog();">

    </div>


    <div id="dialog" style="display:none; border:1px solid #000; background-color:red; width: 100px; height: 100px; margin-top:50px; margin-left:30px;"></div> 

    Grazie
    Ciao

  10. #10
    Secondo me la "dialog" è sbagliata, al posto di usare margin-top e margin-left usa direttamente top e left, infine aggiungi alla dialog la proprietà postion:fixed che la toglie da flusso normale

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.