Хочу продолжить эту тему:
Прокрутка всплывающего окна
У автора вышло попап окно как в вк (
http://vk.com/yeremyan?z=video135551...deos1355510 0), но с закрытием при клике на любом месте. А мне крайне нужно реализовать полноценный вариант - с закрытием только по клику на оверлее, но не на самом окне.
Ход мыслей:
Попытка 1.
Структура HTML такая:
<div class="preload_overlay"></div>
<div class="popup_preload">
content
</div>
<a href="#" class="popup_preload_ref">Open popup</a>
Код:
|
.popup_preload {
width: 960px;
margin: 0 auto;
display: none;[
}
.preload_overlay {
height: 100%;
width: 100%;
position: fixed;
left: 0;
top: 0;
background-color: #808080;
opacity: 0.75;
display: none;
} |
$('.popup_preload_ref').click(function(){
$('.popup_preload, .preload_overlay').css('display', 'block');
$("#outer").css("position","fixed");
setTimeout(function(){
$(".popup_preload").css('display', 'block');
}, 300);
});
$('.preload_overlay').click(function(){
$('.popup_preload').fadeOut(300);
setTimeout(function(){
$(".preload_overlay").css('display', 'none');
$("#outer").css("position","static");
}, 300);
});
Результат: Попап появляется, при нажатии на оверлей - закрывается, при клике на само окно событя не происходят.
Проблема: Но нет прокрутки попапа!
Попытка 2.
Упрощенная структура контакта:
<div class="popup_preload_outer">
<div class="preload_overlay"></div>
<div class="popup_preload_inner">
<div class="popup_preload">
content
</div>
</div>
</div>
Код:
|
.popup_preload_inner {
position: relative;
top: 10%;
padding-bottom: 40px;
}
.popup_preload {
width: 960px;
background: #FFFFFF;
border: 2px solid #0066FF;
border-radius: 10px;
padding: 10px;
margin: 0 auto;
display: none;
}
.popup_preload_outer {
display: none;
overflow: auto;
height: 100%;
width: 100%;
position: fixed;
top: 0;
left: 0;
z-index: 100;
}
.preload_overlay {
height: 100%;
left: 0;
position: fixed;
top: 0;
width: 100%;
background-color: #808080;
opacity: 0.75;
display: none;
} |
$('.popup_preload_ref').click(function(){
$('.popup_preload_outer, .preload_overlay').css('display', 'block');
$("#outer").css("position","fixed");
setTimeout(function(){
$(".popup_preload").css('display', 'block');
}, 300);
});
$('.preload_overlay').click(function(){
$('.popup_preload').fadeOut(300);
setTimeout(function(){
$(".preload_overlay, .popup_preload_outer").css('display', 'none');
$("#outer").css("position","static");
}, 300);
});
Результат: Попап прокручивается точно как в ВК.
Проблема: Попап не закрывается по клику на оверлее, кроме клика по области над попапом - там оверлей выглядывает из-под div.popup_preload_inner.
И в этой точке я застрял. Нащупывал пока два возможных варианта, но оба кривоватые:
Вариант 1.
Задать div.popup_preload float: left - тогда клик на оверлее срабатывает, а на самом окне нет, т.е. все ок.
Проблема: Попап улетел влево и не знаю как его отцентрировать.
Вариант 2.
Справа и слева от div.popup_preload добавить по невидимому блоку, задать им и окну попап float: left и повесить на них закрывающий ивент:
<div class="popup_closer"></div>
<div class="popup_preload">
content
</div>
<div class="popup_closer"></div>
Проблема: усложнение HTML-структуры, при масштабировании ширина невидимок не подгоняется и не покрывают всего оверлея. Вроде можно решить при помощи
https://github.com/yonran/detect-zoom/ но как-то громоздко.
Пардон за кучу текста, если надо постараюсь уточнить!