Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal não entendo muito de javascript, então venho aqui pedir a preciosa ajuda de vocês.
Estou utilizando um codigo javascript que exibe um pop up modal, só que ele não está centralizando a pop up conforme minha resolução for maior.
Só que o código centraliza, só que depois que sofreu uma pequena modificação ele abre no canto da tela.
Segue o Codigo Antigo, Esse o pop up está centralizado, só que só funciona clicando no link:
<script type="text/javascript">
$(document).ready(function() {
$('a[name=modal]').click(function(e) {
e.preventDefault();
var id = $(this).attr('href');
var maskHeight = $(document).height();
var maskWidth = $(window).width();
$('#mask').css({'width':maskWidth,'height':maskHeight});
$('#mask').fadeIn(1000);
$('#mask').fadeTo("slow",0.8);
//Get the window height and width
var winH = $(window).height();
var winW = $(window).width();
$(id).css('top', winH/2-$(id).height()/2);
$(id).css('left', winW/2-$(id).width()/2);
$(id).fadeIn(2000);
});
$('.window .close').click(function (e) {
e.preventDefault();
$('#mask').hide();
$('.window').hide();
});
$('#mask').click(function () {
$(this).hide();
$('.window').hide();
});
});
</script>
Aqui ta modificado, foi tirado o clique para abrir a pop up, para abrir sozinho quando a pessoa entra na pagina:
<script type="text/javascript">
$(function() {
var id = $("#dialog").attr('href');
var maskHeight = $(document).height();
var maskWidth = $(window).width();
$('#mask').css({'width':maskWidth,'height':maskHeight});
$('#mask').fadeIn(1000);
$('#mask').fadeTo("slow",0.8);
//Get the window height and width
var winH = $(window).height();
var winW = $(window).width();
$("#dialog").css('top', winH/2-$(id).height()/2);
$("#dialog").css('left', winW/2-$(id).width()/2);
$("#dialog").fadeIn(2000);
$('.window .close').click(function (e) {
e.preventDefault();
$('#mask').hide();
$('.window').hide();
});
$('#mask').click(function () {
$(this).hide();
$('.window').hide();
});
});
</script>
Quando eu uso o primero código, e minha resolução está maior, ele abre a pop up no meio, centralizado.
Já quando uso o segundo código onde o pop up abre sem precisar clicar, ele fica no canto da tela, não sei porquê, pois o codigo não mudou quase nada.
isso aqui:
$(document).ready(function() {
é exatamente o mesmo que
$(function() {
sao equivalentes.
o segundo é apenas um atalho para o primeiro.
rode assim, e entenda:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>jQuery Modal Window</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
var $dialog = $('#dialog');
var maskHeight = $(document).height();
var maskWidth = $(window).width();
$('#mask').css({'width':maskWidth,'height':maskHeight});
$('#mask').fadeIn(1000);
$('#mask').fadeTo("slow",0.8);
//Get the window height and width
var winH = $(window).height();
var winW = $(window).width();
$dialog.css('top', winH/2-$dialog.height()/2);
$dialog.css('left', winW/2-$dialog.width()/2);
$dialog.fadeIn(2000);
$('.window .close').click(function (e) {
e.preventDefault();
$('#mask').hide();
$('.window').hide();
});
$('#mask').click(function () {
$(this).hide();
$('.window').hide();
});
});
</script>
<style type="text/css">font-family:verdana;
font-size:15px;
}
a {color:#333; text-decoration:none}
a:hover {color:#ccc; text-decoration:none}
#mask {
position:absolute;
left:0;
top:0;
z-index:9000;
background-color:#000;
display:none;
}
#boxes .window {
position:absolute;
left:0;
top:0;
width:440px;
height:200px;
display:none;
z-index:9999;
padding:20px;
}
#boxes #dialog {
width:375px;
height:203px;
padding:10px;
background-color:#ffffff;
}
#boxes #dialog1 {
width:375px;
height:203px;
}
#dialog1 .d-header {
background:url(login-header.png) no-repeat 0 0 transparent;
width:375px;
height:150px;
}
#dialog1 .d-header input {
position:relative;
top:60px;
left:100px;
border:3px solid #cccccc;
height:22px;
width:200px;
font-size:15px;
padding:5px;
margin-top:4px;
}
#dialog1 .d-blank {
float:left;
background:url(login-blank.png) no-repeat 0 0 transparent;
width:267px;
height:53px;
}
#dialog1 .d-login {
float:left;
width:108px;
height:53px;
}
#boxes #dialog2 {
background:url(notice.png) no-repeat 0 0 transparent;
width:326px;
height:229px;
padding:50px 0 20px 25px;
}</style>
</head>
<body>
<div id="boxes">
<div id="dialog" class="window">
<a href="#" class="close">Fechar [X]</a><br />
Janela Modal Simples<br />
Aqui vai o conteúdo da sua Janela Modal Simples.
</div>
<!-- Máscara para cobrir a tela -->
<div id="mask"></div>
</div><!-- /boxes -->
<br /><br />
« <a href="http://www.maujor.com/blog/2009/04/16/janela-modal-com-jquery/">Voltar para o tutorial</a>
</body>
</html>Cool, é um atalho mesmo :)
Muito obrigado William, o código deu certo xD.
Gostaria de aproveitar o tópico e perguntar: tem algumas janelas modal que quando são exibidas, e eu afasto o zoom do navegador, elas ainda continuam centralizadas, e o fundo preto é aumentado, ele tampa toda a tela, já nessa modal, quando é dado um zoom para trás, o fundo preto não cobre toda a tela, e ambos vão para o canto.
O que será que tem naquelas pop up modal??parece uma div 100%.
Sim, a idéia é essa de fazer o 100%, e também usar position: fixed;
porém, precisa ver qual a compatibilidade que você quer. IE6 não entende o fixed.
Pode ser por que na segunda abordagem você está executando a operação antes do documento estar completo, o que faz com que você recupere medidas indesejadas.
Em sua primeira abordagem você aguarda o documento ficar pronto:
$(document).ready(function() {
Já na segunda, não:
$(function() {