2010-01-20 15 views
15

Ho provato quasi tutti i plugin jQuery Modal che riesco a trovare sulla rete ma sono tutti molto voluminosi per quello di cui ho bisogno. Non ho bisogno di tutte le fantastiche funzionalità, voglio poter aprire un div e avere lo sfondo della pagina grigio trasparente come la foto qui sotto e avere il mio div in cima, è tutto ciò che devo fare quindi mi piacerebbe scrivere qualche jQuery per farlo invece di usare un plugin ingombrante. Qualcuno ha qualche piccolo codice che può fare questo compito? Lo sfondo trasparente è un'immagine o solo CSS?div modale semplice in jQuery?

risposta

19

EDIT: Questo è ovviamente superata. Quindi per favore riferisciti al post di Andrew Odri qui sotto.

Non so quanto sei bravo in CSS e JavaScript, ma la tua richiesta non dovrebbe essere così difficile da farti.

body, html { margin:0; padding:0; } 
#modalTabelGray 
{ 
    position:absolute; 
    width:100%; 
    height:100%; 
    background-color:#000000; 
    filter:alpha(opacity=60); 
    opacity:0.6; 
    -moz-opacity:0.6; 
    z-index:100; 

    text-align:center; 
    vertical-align:middle; 
} 

#modalDiv 
{ 
    position:absolute; 
    z-index:101; 
} 

Non ho testato il codice, potrebbe non funzionare, ma avrete l'idea.

+0

se questo funziona, questo è fondamentalmente quello che avevo bisogno di aiuto è la parte css – JasonDavis

+0

Non ho testet, ma come detto, non dovrebbe essere così difficile da fare. La parte più importante è che non si annida il div in div con l'opacità, perché il contenuto diventerà anche trasparente. Puoi usare un PNG trasparente, se preferisci. –

+0

Penso che creare la tua versione potrebbe essere una buona idea. Lavorerò per i primi 2-3 compiti che vuoi completare. Ma più tardi, è necessario che sia più complesso. La mia esperienza mi dice che finirà per essere più disordinato e finire per essere più grande, rispetto ad alcuni degli altri plugin là fuori. Ce ne sono tantissimi :-) – Kordonme

2

È possibile utilizzare jQuery UI, che ha una finestra di dialogo plugin che supporta modale .. http://jqueryui.com/demos/dialog/#modal

In alternativa si potrebbe creare un div che attraversa l'intera finestra di dimensioni, impostare la sua opacità al 50% (0.5) e anche catturare e fermare tutti gli eventi per renderlo modale. Quindi visualizza il tuo div in cima ..

6

Vorrei NON consiglia l'interfaccia utente di jQuery: è un enorme e troppo complesso per quel compito semplice. Qui ci sono alcuni altri plugin:

+0

Sì, non userò jqueryUI, ma voglio anche stare lontano da altri liek principali che hai elencato, sono "leggeri" ma non abbastanza leggeri per le mie esigenze – JasonDavis

+0

Dirò http://malsup.com/jquery/block/Non l'ho mai visto ed è carino! – JasonDavis

+0

Ho elencato solo alcuni dei plugin esistenti. Basta google "jquery modal" e ne troverai molti. Alcuni più complessi di altri :-) – Kordonme

0

Per citarne un altro plugin per questo compito è nyromodal che trovo facile da usare, ma offre ancora un sacco di opzioni di impostazione, se si dovrebbe trovare te stesso nella necessità di che (poi)

3

SimpleModal fa esattamente ciò che si vuole fare.

46

Questo è quello che uso io stesso; sembra bello, il codice è semplice e facile da capire e utilizza CSS e jQuery minimi.

Ecco il codice (e un violino per vederlo in azione: http://jsfiddle.net/cadkJ/125/):

HTML

<h1>Bacon ipsum dolor sit amet</h1> 

<p>Magna adipisicing eu, pig ex pariatur non biltong nisi consequat do exercitation. Biltong exercitation consequat aute. Excepteur velit ribeye, et salami pariatur sed consequat enim ham. Tenderloin consequat et, in pastrami aute meatloaf beef spare ribs tri-tip beef ribs sed ut jerky strip steak. Fugiat turkey shank frankfurter pork loin pastrami.</p> 

<button id="modal-launcher">Launch Modal Window</button> 

<div id="modal-background"></div> 
<div id="modal-content"> 
    <button id="modal-close">Close Modal Window</button> 
</div>​ 

CSS

#modal-background { 
    display: none; 
    position: fixed; 
    top: 0; 
    left: 0; 
    width: 100%; 
    height: 100%; 
    background-color: white; 
    opacity: .50; 
    -webkit-opacity: .5; 
    -moz-opacity: .5; 
    filter: alpha(opacity=50); 
    z-index: 1000; 
} 

#modal-content { 
    background-color: white; 
    border-radius: 10px; 
    -webkit-border-radius: 10px; 
    -moz-border-radius: 10px; 
    box-shadow: 0 0 20px 0 #222; 
    -webkit-box-shadow: 0 0 20px 0 #222; 
    -moz-box-shadow: 0 0 20px 0 #222; 
    display: none; 
    height: 240px; 
    left: 50%; 
    margin: -120px 0 0 -160px; 
    padding: 10px; 
    position: fixed; 
    top: 50%; 
    width: 320px; 
    z-index: 1000; 
} 

#modal-background.active, #modal-content.active { 
    display: block; 
}​ 

jQuery

$(function(){ 
    $("#modal-launcher, #modal-background, #modal-close").click(function() { 
     $("#modal-content, #modal-background").toggleClass("active"); 
    }); 
}); 

Vuoi bloccare lo scorrimento?

Aggiungere la seguente regola CSS:

body.active { position: fixed; overflow: hidden; } 

Sostituire la funzione jQuery con: (body aggiunti alla linea 3)

$(function(){ 
    $("#modal-launcher, #modal-background, #modal-close").click(function() { 
     $("body, #modal-content, #modal-background").toggleClass("active"); 
    }); 
}); 

Vuoi per prevenire eventi click sullo sfondo da chiudendo il modale?

Sostituire la funzione jQuery con: (#modal-background rimosso dalla linea 2)

$(function(){ 
    $("#modal-launcher, #modal-close").click(function() { 
     $("#modal-content, #modal-background").toggleClass("active"); 
    }); 
}); 
+5

Freddo. Ho refactored il tuo javascript. http://jsfiddle.net/cadkJ/125/ –

+0

@LarryBattle Questo è molto più bello; Grazie! –

+0

molto bello !!!, grazie! – Kakitori

1

È possibile creare un semplice modale con puro HTML e CSS, non c'è bisogno di JavaScript e jQuery, che indirettamente, ridurre i tempi e lavoro.

html--> 
    <a href="#openModal">Open Modal</a> 

    <div id="openModal" class="modalDialog"> 
    <div> <a href="#close" title="Close" class="close">X</a> 

     <h2>Modal Box</h2> 

    <p>This is a sample modal box that can be created using the powers of CSS3.</p> 
    <p>You could do a lot of things here like have a pop-up ad that shows when your website loads, or create a login/register form for users.</p> 
    </div> 
    </div> 

     css--> 

    .modalDialog { 
position: fixed; 
font-family: Arial, Helvetica, sans-serif; 
top: 0; 
right: 0; 
bottom: 0; 
left: 0; 
background: rgba(0, 0, 0, 0.8); 
z-index: 99999; 
opacity:0; 
-webkit-transition: opacity 400ms ease-in; 
-moz-transition: opacity 400ms ease-in; 
transition: opacity 400ms ease-in; 
pointer-events: none; 
} 
.modalDialog:target { 
opacity:1; 
pointer-events: auto; 
} 
.modalDialog > div { 
width: 400px; 
position: relative; 
margin: 10% auto; 
padding: 5px 20px 13px 20px; 
border-radius: 10px; 
background: #fff; 
background: -moz-linear-gradient(#fff, #999); 
background: -webkit-linear-gradient(#fff, #999); 
background: -o-linear-gradient(#fff, #999); 
} 
.close { 
background: #606061; 
color: #FFFFFF; 
line-height: 25px; 
position: absolute; 
right: -12px; 
text-align: center; 
top: -10px; 
width: 24px; 
text-decoration: none; 
font-weight: bold; 
-webkit-border-radius: 12px; 
-moz-border-radius: 12px; 
border-radius: 12px; 
-moz-box-shadow: 1px 1px 3px #000; 
-webkit-box-shadow: 1px 1px 3px #000; 
box-shadow: 1px 1px 3px #000; 
} 
.close:hover { 
background: #00d9ff; 
} 

visita this.