Как сделать закрытие PopUp при клике по фону?

Вот шикарный pop up без использования каких-либо внешних ресурсов и с минимумом кода jsfiddle.net/p7NbX/15

Пытаюсь допилить к нему скрытие по клику где-то вне окна - не получается.

Пробовал всякие костыли типа:
<a href="javascript:PopUpHide()"><span style="display:block; position: absolute; width:100%; height:100%;"></span></a>
  • Вопрос задан
  • 13194 просмотра
Решения вопроса 1
creativeworm
@creativeworm
Маску нужно сделать отдельным дивом (пустым, только со стилями).
Окно абсолютно позиционируем и поднимаем над маской.
Тогда сработает так:
$('<класс или id маски>').click(function () { <скрываем маску и поп-ап> });


В спойлере вариант есть. Переподключите jquery и все.
Реализовано центрирование pop-up, маска и то, в чем у Вас проблема.

Вполне работающий вариант
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Демо</title>
<style>
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(images/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(images/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(images/notice.png) no-repeat 0 0 transparent; 
  width:326px; 
  height:229px;
  padding:50px 0 20px 25px;
}
</style>

<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
<script>

$(document).ready(function() {	

	//select all the a tag with name equal to modal
	$('a[name=modal]').click(function(e) {
		//Cancel the link behavior
		e.preventDefault();
		//Get the A tag
		var id = $(this).attr('href');
	
		//Get the screen height and width
		var maskHeight = $(document).height();
		var maskWidth = $(window).width();
	
		//Set heigth and width to mask to fill up the whole screen
		$('#mask').css({'width':maskWidth,'height':maskHeight});
		
		//transition effect		
		$('#mask').fadeIn(1000);	
		$('#mask').fadeTo("slow",0.8);	
	
		//Get the window height and width
		var winH = $(window).height();
		var winW = $(window).width();
              
		//Set the popup window to center
		$(id).css('top',  winH/2-$(id).height()/2);
		$(id).css('left', winW/2-$(id).width()/2);
	
		//transition effect
		$(id).fadeIn(2000); 
	
	});
	
	//if close button is clicked
	$('.window .close').click(function (e) {
		//Cancel the link behavior
		e.preventDefault();
		$('#mask, .window').hide();
	});		
	
	//if mask is clicked
	$('#mask').click(function () {
		$(this).hide();
		$('.window').hide();
	});			
	
});

</script>


</head>

<body>
<ul>
<li><a href="#dialog" name="modal">Простое модальное окно</a></li>
<li><a href="#dialog1" name="modal">Форма для логина</a></li>
<li><a href="#dialog2" name="modal">Красивая липучка</a></li>
</ul>


<div id="boxes">

<div id="dialog" class="window">

Простое модальное окно | 
<a href="#"class="close"/>Закрыть его</a>
</div>
  
<!-- НАчало формы логина -->  
<div id="dialog1" class="window">
  <div class="d-header">
    <input type="text" value="username" onclick="this.value=''"/><br/>
    <input type="password" value="Password" onclick="this.value=''"/>    
  </div>
  <div class="d-blank"></div>
  <div class="d-login"><input type="image" alt="Login" title="Login" src="images/login-button.png"/></div>

</div>
<!-- конец -->  



<!-- Начало красивого стикера -->
<div id="dialog2" class="window">
  Вот так все красиво!! <b>Ruseller.com</b> - всегда только лучшая информация<br/><br/>
<input type="button" value="НУ НАЖМИТЕ МЕНЯ!!!" class="close"/>
</div>
<!-- конец -->



<!-- Макска, которая затемняет весь экран -->
  <div id="mask"></div>

</div></body>
</html>
</spoiler>
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@bogomazov_vadim
Попробуй посмотреть это:
www.xiper.net/collect/js-plugins/ui/closepopup.html
Ответ написан
Комментировать
Vakiliy
@Vakiliy
Такой вариант:
$(document).ready(function(){
    $('#popup1').click(PopUpHide);
    $("#popup1 div").click(function(e) {
        e.stopPropagation();
   });  
....
Ответ написан
Комментировать
GM2mars
@GM2mars
jQuery('.b-popup').on('click', function(event) {
  var el=jQuery(event.target);
  if (el.hasClass('b-popup')) PopUpHide();      
});

jsfiddle.net/p7NbX/15
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы