Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

xTrovaox

Centralizar Pop Up Modal

Recommended Posts

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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() { 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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"> 
body {
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;
}
.close{display:block; text-align:right;}

</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> 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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%.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.