Прокрутка всплывающего окна с правильным закрытием
Хочу продолжить эту тему:
Прокрутка всплывающего окна У автора вышло попап окно как в вк (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 {
$('.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 {
$('.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/ но как-то громоздко. Пардон за кучу текста, если надо постараюсь уточнить! |
Как полезно изложить мысли - сразу придумалось.
Float: left в Вариант 1 убирал высоту у .popup_preload_inner и этим давал доступ к оверлею, который был под ним. Вместо этого добавляем width: 985px; margin: 0 auto; к .popup_preload_inner. И все фурычит:dance: |
| Часовой пояс GMT +3, время: 05:56. |