Visita <a href="http://www.liquida.it/" title="Notizie e opinioni dai blog italiani su Liquida">Liquida</a> e <a href="http://www.liquida.it/widget.liquida/" title="I widget di Liquida per il tuo blog">Widget</a>
Cerchi guide e consigli riguardo al mondo del webdesign?
Sei nel posto giusto!
Iscriviti subito al nostro Feed RSS!

Come creare una semplice finestra di dialogo in jQuery

Articolo pubblicato il 12-01-2010. Categorie: CSS, jQuery, PHP e.., Tutorial testuali. Commenti: 18.

Come creare una semplice finestra di dialogo in jQuery
Ammetto di aver cercato in lungo ed in largo una guida che spiegasse come creare un popup, o una finestra di dialogo, in jQuery, prima di esser arrivato alla soluzione finale di smanettare da solo. In verità, ho trovato alcuni tutorial, ma la maggior parte non mi assicuravano una perfetta compatibilità con IE 7+ ed avevano alcuni problemi di CSS. Inoltre, cercavo qualcosa di davvero semplice e mi sembrava futile installare qualche libreria per jQuery solo per fare una cosa banalissima. Ma bando alle ciance, ecco una demo, molto minimale, di ciò che dovreste ottenere. Partiamo con il codice! Come creare una semplice finestra di dialogo in jQuery

Strutturiamo così il nostro css:

/* Alcune righe di codice di convenzione */
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em,
font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody,
tfoot, thead, tr, th, td {
border:0pt none;
font-family:inherit;
font-size:100%;
font-style:inherit;
font-weight:inherit;
margin:0pt;
padding:0pt;
vertical-align:baseline;
}
/* Ci servirà per oscurare la pagina */
#nero{
/* Imposto il colore nero */
background-color:#000000;
/* Imposto come puntatore la manina */
cursor:pointer;
/* Imposto i valori di altezza e larghezza a 100% */
height:100%;
width:100%;
/* Ci servirà in modo tale che non ci siano margini */
left:0;
top:0;
/* Impostiamo come posizione la fissa */
position:fixed;
/* Aggiungiamo i codice per opacizzare lo sfondo. */
opacity: 0.65;
-moz-opacity: 0.65;
filter:alpha(opacity=65);
/* E' utile nel caso in cui ci siano altri oggetti in posizione assoluta o fissa */
z-index:1000;
/* Lo rendiamo non visibile */
display:none;
}
 
/* Questo sarà il nostro popup */
.messaggio{
/* Impostiamo il bianco come colore di sfondo e creiamo un piccolo bordo */
background-color:#FFFFFF;
border:3px solid #AAAAAA;
/* Impostiamo un leggero margine interno */
padding:5px;
/* Impostiamo la posizione come fissa. Ci servirà in modo tale che il popup segua lo scrolling della pagina */
position:fixed;
/* Impostiamo lo z-index come 1001. Lo z-index è una sorta di gestore di livelli. Chi avrà il numero maggiore si troverà davanti a chi ha numero minore. Facile no? */
z-index:1001;
/* Rendiamo il popup non visibile */
display: none;
/* Impostiamo la grandezza del box. Ci servirà in quanto così possiamo facilmente impostare il box centrato nella pagina */
width: 350px;
height: 350px;
/* Impostiamo i valori di top e left a 50% */
left: 50%;
top: 50%;
/* Il margin left e top dovrà essere pari alla metà delle dimensioni del box. Ci servirà per centrare il box */
margin-left: -175px;
margin-top: -175px;
text-align:center;
/* Impostiamo un'ombra con CSS3 */
-webkit-box-shadow: 0px 0px 10px #525252;
-moz-box-shadow: 0px 0px 10px #525252;
}

Mentre questo sarà il nostro codice html:

<button id="cliccaqui" style="width: 100px; height: 50px;">
Clicca qui!
</button>
<div class="messaggio">
On the other hand, we denounce with righteous indignation and dislike men who are so beguiled and demoralized by the charms of pleasure of the moment, so blinded by desire, that they cannot foresee the pain and trouble that are bound to ensue; and equal blame belongs to those who fail in their duty through weakness of will, which is the same as saying through shrinking from toil and pain. These cases are perfectly simple and easy to distinguish. In a free hour, when our power of choice is untrammelled and when nothing prevents our being able to do what we like best, every pleasure is to be welcomed and every pain avoided. But in certain circumstances and owing to the claims of duty or the obligations of business it will frequently occur that pleasures have to be repudiated and annoyances accepted. The wise man therefore always holds in these matters to this principle of selection: he rejects pleasures to secure other greater pleasures.</div>

Saranno inseriti, quindi, sia il div nero che il div messaggio, ma ambedue non sono visibili (display: none). Nell’head del documento, richiamiamo la libreria jQuery:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"><!--mce:0--></script>

E creiamo il nostro script:

$(document).ready(function () {
	//Al click dell'id "cliccaqui"..
	$("#cliccaqui").click(function(){
 
		//Apparirà il div messaggio. FadeIn cambia il display del div a cui si riferisce da none a block.
		$(".messaggio").fadeIn("slow");
		//Allora perchè non usarlo anche qua? Perchè fadeIn, annulla anche la trasparenza, quindi o chiamiamo prima un fadeIn e poi modifichiamo il valore di opacità, o andiamo a modificare "manualmente" il css del div.
		$("#nero").css("display", "block");
 
		//Al click del div nero (cioè tutto lo sfondo dietro il popup)
			$("#nero").click(function(){
				//Scompare l'effetto scuro e il messaggio
				$("#nero").css("display", "none");
				$(".messaggio").fadeOut("slow");
			});
	});
});

Ecco il nostro popup completato! Ecco il codice completo utilizzato.

n
 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"><!--mce:1--></script>
<script type="text/javascript"><!--mce:2--></script>
 
<button id="cliccaqui" style="width: 100px; height: 50px;">
Clicca qui!
</button>
<div class="messaggio">
On the other hand, we denounce with righteous indignation and dislike men who are so beguiled and demoralized by the charms of pleasure of the moment, so blinded by desire, that they cannot foresee the pain and trouble that are bound to ensue; and equal blame belongs to those who fail in their duty through weakness of will, which is the same as saying through shrinking from toil and pain. These cases are perfectly simple and easy to distinguish. In a free hour, when our power of choice is untrammelled and when nothing prevents our being able to do what we like best, every pleasure is to be welcomed and every pain avoided. But in certain circumstances and owing to the claims of duty or the obligations of business it will frequently occur that pleasures have to be repudiated and annoyances accepted. The wise man therefore always holds in these matters to this principle of selection: he rejects pleasures to secure other greater pleasures.</div>

Vi ricordo che per vedere una demo potete cliccare qui, mentre potete scaricare il popup da qui. Per qualsiasi domanda o dubbio vi rimandiamo ai commenti Come creare una semplice finestra di dialogo in jQuery
Rispondendo a una domanda posta nei commenti, illustriamo, inoltre, come far chiudere il popup al click di un’icona. Aggiungiamo l’immagine in un punto qualsiasi del popup.

<img id="chiudi" src="chiudi.gif" alt="Chiudi il popup" />

Con il relativo CSS:

#chiudi{
cursor:pointer;
position:absolute;
right:0;
top:0;
width:34px;
}

E infine nel jQuery aggiungiamo:

$("#chiudi").click(function(){
				$("#nero").css("display", "none");
				$(".messaggio").fadeOut("slow");
			});

In questo modo, al click dell’icona o dello sfondo, scomparirà il popup Come creare una semplice finestra di dialogo in jQuery

18 commenti


  1. AstorinoGD
    gennaio 12th, 2010

    secondo me sarebbe ottimo anche applicare il fadeout al background nero

    Rispondi


    Artedelweb
    gennaio 12th, 2010

    Purtroppo è sconveniente. Se si utilizza fadeOut, l'opacità del div nero diventerà pari a 0, e quindi se il popup dovesse essere aperto un'altra volta non apparirebbe lo sfondo opacizzato ;)

    Rispondi




  2. WebDesigner92
    gennaio 14th, 2010

    E se volessimo mettere una croce per chiudere il poput in alto a sinistra sarebbe difficile a farsi?
    Sarebbe interessante vedere come si fa

    Rispondi


    Artedelweb
    gennaio 15th, 2010

    Ho aggiornato l'articolo un esempio abbastanza sbrigativo ;)

    Rispondi


    Francesco
    gennaio 15th, 2010

    Wow fantastico grazie! Più facile di quello che mi immaginavo a dire il vero…
    Comunque mi chiedo come mai se è così facile da realizzare il tutto esistono cose come LightBox e simili

    Rispondi


    Artedelweb
    gennaio 15th, 2010

    Perchè LightBox presenta molte più funzionalità o anche solo perchè è più semplice da usare :)


    Francesco
    gennaio 15th, 2010

    Grazie per i chiarimenti


    Artedelweb
    gennaio 15th, 2010

    Di nulla ;D








  3. luisa
    gennaio 22nd, 2011

    E se invece volessimo che la popup si aprisse all’apertura della pagina senza dover cliccare come potremmo fare?

    Rispondi


    Artedelweb
    gennaio 23rd, 2011

    Ciao Luisa! Ti basta eliminare la riga 3 $("#cliccaqui").click(function(){ e la 16 }); :)

    Rispondi




  4. viali
    febbraio 9th, 2011

    Ciao, mi sarebbe comodissimo, ho bisogno di creare una pagina con alcuni link che aprano finestre popup…ho caricato la cartella zippata e aperto il file index, funziona bene ma putroppo non riesco se duplico il bottone non funziona , funziona solo il primo :-(( come posso fare? grazie

    Rispondi


    Artedelweb
    febbraio 10th, 2011

    Dovresti cambiare i vari ID dei div sia nel CSS che nel corrispondente jQuery.. se si tratta di numerose finestre, ti conviene optare per plugin già pronti come http://jqueryui.com/demos/dialog/#animated

    Rispondi




  5. Graziano
    giugno 14th, 2011

    Ciao Artedelweb e complimenti il tuo articolo è il più chiaro.
    Mi servirebbe, e penso sia utile anche ad altri, sapere come fare per far si che la finestra modale si apra una sola volta alla prima visita, so che bisogna usare un cookie ma l’implementazione nel tuo script mi è difficile da apprendere, tu mi puoi aiutare?
    Grazie
    Graziano

    Rispondi



  6. Simone
    luglio 16th, 2011

    Ciao,
    articolo interessantissimo.
    Si può modificare lo script in modo che il popup si apra dopo un tot di secondi?

    Rispondi


    Artedelweb
    agosto 27th, 2011

    prova a vedere qui: http://api.jquery.com/delay/

    Rispondi




  7. azcoit
    novembre 8th, 2011

    Ciao come potre fare per implementare a questa popup uno scrollbar per inserire più testo pur mantenendo le dimensioni?
    grazie.
    Ottimo tutorial……

    Rispondi



  8. Clay338
    aprile 25th, 2012

    Salve e complimenti per la precisione con cui specificate il modus operandi, volevo chiedere se fosse possibile aggiungere alla chiusura del pop up un’altro pop up di ringraziamento, o come magari il primo farlo diventare un form mail e alla sua chiusura invio esce un nuovo popup di ringraziamento. Grazie ancora

    Rispondi



  9. ChatMemesBig
    maggio 10th, 2012

    Salve, vorrei chiederle se si potrebbe togliere il bottone e mettere un immagine che appena clicca ” onclick” appare la finestra…
    Grazie mille :)

    Rispondi